赞
踩
由于本人第一次参加的是cpp组,第二次参加的python组,所以一些技巧都是关于cpp和python的
AC=Answer Coarse=粗劣的答案
WA=Wonderful Answer=完美的答案
TLE=Time Limit Enough=时间充裕
MLE=Memory Limit Enough=内存充裕
CE=Compile Easily=轻松通过编译
RE=Run Easily=轻松通过运行
进入正题
#include<bits/stdc++.h>
这个头文件包含所有的头文件,优缺点如下:
优点:
缺点:
踩坑经历:第一次参加蓝桥杯的时候院校老师没设置c++11标准,导致一些函数都用不了(如map,auto等)
设置方式:
工具—>编译选项---->勾选"编译时加入以下命令"---->输入命令-std=c++11
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)
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; }
因为这题是填空题,所以用什么语言都可以,最后只需要运行出来一个结果就行
样例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; }
这个暴力大约能拿60%的分数(这就是我比赛写的)
ac code
参考这篇
样例3:(第十四届b组cpp大题)
看到这个我人是懵逼的,连题目都看不懂,但是不写又没事干,这时候又把题目给看了一下,30%数据范围是
N
≤
2
N\leq2
N≤2,说明测试样例中肯定是有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;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。