当前位置:   article > 正文

蓝桥杯骗分小技巧_蓝桥杯怎样骗分

蓝桥杯怎样骗分

写在前面

由于本人第一次参加的是cpp组,第二次参加的python组,所以一些技巧都是关于cpp和python的

先上圣经

贪心骗样例,暴力出奇迹。 暴搜挂着机,打表出省一。
数学先打表,DP看运气。穷举TLE,打表UKE。
模拟MLE,贪心还CE。想要骗到分,就要有办法。
图论背模板,数论背公式。动规背方程,高精背代码。
如果都没背,干脆输样例!
模拟只会猜题意,贪心只能过样例。
数学上来先打表,规律一般是 D P。
组合数学碰运气,计算几何瞎暴力。
图论一顿套模板,数论只会 G C D。
七八个测试点,两三次CE前,旧时题解花样变,听取WA声一片......

AC=Answer Coarse=粗劣的答案
WA=Wonderful Answer=完美的答案
TLE=Time Limit Enough=时间充裕
MLE=Memory Limit Enough=内存充裕
CE=Compile Easily=轻松通过编译
RE=Run Easily=轻松通过运行

进入正题

cpp

万能头文件

#include<bits/stdc++.h>

这个头文件包含所有的头文件,优缺点如下:
优点:

  • 避免忘记函数头文件的名字
  • 简化头文件的书写,只用写一行就可以解决所有的书写,懒人必备

缺点:

  • 编译时间较长,但是好在测评不会计入编译时间

设置c++11

踩坑经历:第一次参加蓝桥杯的时候院校老师没设置c++11标准,导致一些函数都用不了(如map,auto等)
设置方式:
工具—>编译选项---->勾选"编译时加入以下命令"---->输入命令-std=c++11

python一些包的设置

import sys
sys.setrecursionlimit(100000)
设置python的最大递归次数(由于cpp写习惯了,一些算法题喜欢用递归,但是总是暴栈),找了一些方法之后才知道这个库函数的

踩坑样例:
在这里插入图片描述
限制递归次数之后

import sys
input = lambda: sys.stdin.readline().strip()
功能:加速读入
踩坑样例
在这里插入图片描述
加了之后
在这里插入图片描述

实战骗分小技巧

样例1:(第十四届b组cpp填空题)
在这里插入图片描述
如果这题用cpp写的话,可能很难写(反正我打了好一会暴力还是没打出来,最后还是手算的,虽然还是算错了)
但是如果知道python的日期类型的话可能就比较好写(如果学校的电脑上没有pycharm就当我没说)
python的code如下:

from datetime import datetime, timedelta
st = '''5 6 8 6 9 1 6 1 2 4 9 1 9 8 2 3 6 4 7 7 5 9 5 0 3 8 7 5 8 1 5 8 6 1 8 3 0 3 7 9 2
7 0 5 8 8 5 7 0 9 9 1 9 4 4 6 8 6 3 3 8 5 1 6 3 4 6 7 0 7 8 2 7 6 8 9 5 6 5 6 1 4 0 1
0 0 9 4 8 0 9 1 2 8 5 0 2 5 3 3
'''
st = list(st.split())
dt1 = datetime(2023, 1, 1)#默认是2023-01-01 00:00:00
dt2 = datetime(2023, 12, 31)
res = 0
while dt2 >= dt1:
    date = dt1.strftime('%Y%m%d')#格式化成20230101这种格式
    num = 0
    for i in range(len(st)):
        if num == 8:#如果找到8位数字与当前日期相等res+1
            res += 1
            break
        if date[num] == st[i]:#枚举每一个数字找到相等的
            num += 1
    dt1 += timedelta(days=1)#日期加1
print(res)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

cpp的code:

#include <iostream>
using namespace std;
int main()
{
  int month,day,i,j,sum=0;
  int  a[100]={5,6,8,6,9,1,6,1,2,4,9,1,9,8,2,3,6,4,7,7,5,9,5,0,3,8,7,5,8,1,5,8,6,1,8,3,0,3,7,9,2,
               7,0,5,8,8,5,7,0,9,9,1,9,4,4,6,8,6,3,3,8,5,1,6,3,4,6,7,0,7,8,2,7,6,8,9,5,6,5,6,1,4,
               0,1,0,0,9,4,8,0,9,1,2,8,5,0,2,5,3,3};
    for(month=1;month<=12;month++)
    {
        if(month==2)
          day=28;
        else if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
          day=31;
        else
          day=30;
        for(int d=1;d<=day;d++) 
        {
            j=0;
            int b[8]={2,0,2,3,month/10,month%10,d/10,d%10};
            for(i=0;i<100;i++)
            {
                if(a[i]==b[j])
                  j++;
                if(j==8)
                  {
                      sum++;
                    break;
                  }
            }
        }
    }    
    cout<<sum; 
  return 0;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

因为这题是填空题,所以用什么语言都可以,最后只需要运行出来一个结果就行

样例2:(第十四届b组cpp大题)
在这里插入图片描述
这个需要一点思维,如果实在思维过不去,可以试着打暴力,code如下:

#include <iostream>
#include <cstring>
#include <algorithm>
 
using namespace std;
const int N = 1e4+10;
int a,b,r;
pair<int,int>p[N];
#define x first
#define y second
 int n;
int check(int r)
{
    for(;r>0;--r)
   for(int i=0;i<n;++i)
    if(p[i].x/r!=p[i].y)
    return r;
    return 0;
}
 
int main()
{
   
    cin>>n; 
    int r=1e9+10;
    for (int i = 0; i < n; i ++ )
    {
        cin>>p[i].x>>p[i].y;
        r=min(r,p[i].x/p[i].y);
    }
    int l=check(r)+1;
    cout<<l<<" "<<r<<endl;
    return 0;
}

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

这个暴力大约能拿60%的分数(这就是我比赛写的)
ac code
参考这篇

样例3:(第十四届b组cpp大题)
在这里插入图片描述
看到这个我人是懵逼的,连题目都看不懂,但是不写又没事干,这时候又把题目给看了一下,30%数据范围是 N ≤ 2 N\leq2 N2,说明测试样例中肯定是有30%的分可以枚举的,直接判断,当N==1的时候肯定是输出yes的,当N==2时只需要把所有的方案给枚举出来就行了,30%的分数到手,剩下的更高的,如果没事干可以用if else枚举出来。
ac code
参考这个

在这里插入图片描述
样例4:(第九届b组cpp)
在这里插入图片描述
这题可以用手算,也可以写代码算,但是聪明的彦祖和亦菲都选择打开excel,一个表格一拉,优雅而又准确(excel是26进制的)
在这里插入图片描述
样例5(第九届b组cpp)
在这里插入图片描述
直接面向excel编程:
在这里插入图片描述

样例6
在这里插入图片描述
这题如果不会写,直接输出Draw/Red/Blue,理论上来说将会获得30%的分数,如果运气说不定能获得40%的分数,骗就完了。

样例7:
在这里插入图片描述
如果这题稍微修改一下,修改成输入一个数字n,输入第n个素数,各位彦祖和亦菲又该如何应对呢?
正经人打暴力,聪明人选择线性筛,聪明的彦祖与亦菲选择打表,也就是直接先枚举前二十万个素数,然后复制粘贴进数组里面并定义一个arr,接下来只需要输入n,输出arr[n]即可,这就是打表法

样例8
无解法
如果题目中有若xxx则输出-1
不用犹豫,直接cout<<-1<<endl;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/553391
推荐阅读
相关标签
  

闽ICP备14008679号