2018年蓝桥杯整理
2020-04-05 18:24
162 查看
分数
1.快速幂
2.最大公约数
#include<iostream> using namespace std; long pow_2(int b){ long x=2; long res=1; while(b>0){ if(b&1) res*=x; b>>=1; x=x*x; } return res; } int gcd(long a,long b){ if(b==0) return a; return gcd(b,a%b); } int main(){ cout<<gcd(pow_2(20)-1,pow_2(19))<<endl; cout<<pow_2(20)-1<<"/"<<pow_2(19); }
乘积尾零
1.零来自5*2,所以只要统计2和5的个数
#include<iostream> using namespace std; int main(){ int data[]={5650,4542,3554,473,946,4114,3871,9073,90,4329 ,2758, 7949 ,6113, 5659, 5245 ,7432, 3051 ,4434, 6704 ,3594 ,9937, 1173 ,6866, 3397, 4759 ,7557, 3070 ,2287 ,1453 ,9899 ,1486, 5722 ,3135, 1170, 4014, 5510, 5120, 729 ,2880 ,9019 ,2049, 698 ,4582 ,4346 ,4427 ,646 ,9742 ,7340, 1230 ,7683 ,5693, 7015 ,6887, 7381, 4172, 4341, 2909 ,2027, 7355, 5649 ,6701, 6645 ,1671, 5978, 2704, 9926, 295 ,3125, 3878, 6785 ,2066, 4247 ,4800, 1578, 6652, 4616, 1113 ,6205, 3264 ,2915 ,3966, 5291 ,2904, 1285, 2193, 1428, 2265, 8730, 9436, 7074 ,689 ,5510 ,8243 ,6114 ,337, 4096 ,8199, 7313 ,3685, 211}; int c2=0,c5=0; for(int i=0;i<100;i++){ int num=data[i]; while(num%2==0){ c2++; num/=2; } while(num%5==0){ c5++; num/=5; } } // cout<<c2<<" "<<c5<<endl; cout<<min(c2,c5)<<endl; return 0; }
第几个幸运数
1.和素数筛法相似
2.利用set排序与去重
#include<iostream>//生成法,set #include<set> using namespace std; typedef long long ll; const ll maxn=59084709587505; int main(){ int a[3]={3,5,7}; ll tou=1; set<ll> s; while (true){ for(int i=0;i<3;i++){ ll tt=tou*a[i];//t分别乘以3,5,7 if(tt<=maxn) s.insert(tt); } tou=*(s.upper_bound(tou));//从set中选择比tou大的最小数 if(tou>=maxn) break; } cout<<s.size()<<endl; return 0; }
航班时间
1.处理输入
2.发现规律
#include<iostream> #include<cstring> #include<cstdio> using namespace std; int T; int getTime(){ char line[100]={}; cin.getline(line,100); int h1,m1,s1,h2,m2,s2,d=0; if(strlen(line)==17){ sscanf(line,"%d:%d:%d %d:%d:%d",&h1,&m1,&s1,&h2,&m2,&s2); } else sscanf(line,"%d:%d:%d %d:%d:%d (+%d)",&h1,&m1,&s1,&h2,&m2,&s2,&d); int time=d*24*3600+h2*3600+m2*60+s2-h1*3600-m1*60-s1; return time; } int main() { (cin>>T).get(); /*for(int i=0;i<T;i++){ char line[100]={}; cin.getline(line,100); int h1,m1,s1,h2,m2,s2,d=0; if(strlen(line)==17){ sscanf(line,"%d:%d:%d %d:%d:%d",&h1,&m1,&s1,&h2,&m2,&s2); } else sscanf(line,"%d:%d:%d %d:%d:%d (+%d)",&h1,&m1,&s1,&h2,&m2,&s2,&d); int time1=d*24*3600+h2*3600+m2*60+s2-h1*3600-m1*60-s1; // cin.getline(line,100); if(strlen(line)==17){ sscanf(line,"%d:%d:%d %d:%d:%d",&h1,&m1,&s1,&h2,&m2,&s2); } else sscanf(line,"%d:%d:%d %d:%d:%d (+%d)",&h1,&m1,&s1,&h2,&m2,&s2,&d); int time2=d*24*3600+h2*3600+m2*60+s2-h1*3600-m1*60-s1; // */ for(int i=0;i<T;i++){ int time1=getTime(); int time2=getTime(); int t=(time1+time2)/2; printf("%02d:%02d:%02d\n",t/3600,t/60%60,t%60); } return 0; }
全球变暖
#include<iostream>//宽搜连通块 #include<cstdlib> #include<cstring> #include<ctime> #include<queue> using namespace std; int N,ans;//分别为:规模,答案 int dx[]={0,0,1,-1}; int dy[]={1,-1,0,0}; char data[1000][1000]; int mark[1000][1000]; struct Point{ int x,y; }; void bfs(int i,int j){ mark[i][j]=1;//标记 queue<Point> q; q.push({i,j}); int cnt1=0,cnt2=0;//记录#的数量与.相邻 while(!q.empty()){ Point first=q.front(); q.pop(); cnt1++; bool swed=false;//标记弹出#四周是否有. for(int k=0;k<4;k++){ int x=first.x+dx[k]; int y=first.y+dy[k]; if(0<=x&&x<N&&0<=y&&y<N&&data[x][y]=='.') swed=true; if(0<=x&&x<N&&0<=y&&y<N&&data[x][y]=='#'&&mark[x][y]==0){ q.push({x,y}); mark[x][y]=1; } } if(swed) cnt2++; } if(cnt1==cnt2) ans++; } void work(){ //快读 std::ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin>>N;//读取规模 char next; cin.get(next); while(next!='\n') cin.get(next); for(int i=0;i<N;i++){ for(int j=0;j<N;j++) cin.get(data[i][j]); //读取换行符 while(next!='\n') cin.get(next); } //双循环检验# for(int i=0;i<N;i++){ for(int j=0;j<N;j++){ if(mark[i][j]==0&&data[i][j]=='#') { bfs(i,j); } } } cout<<ans<<endl; } int main(){ int ago=clock(); work(); clog<<"运行时间"<<clock-ago<<endl; return 0; }
三体攻击
1模拟
2.效率较低
#include<iostream> #include<cstring> using namespace std; int A,B,C,m,a,b,c; int getInt(){//快读 char ch=getchar(); int x=0,f=1; while(ch<'0'||ch>'9'){ if(ch=='-') f=-1; ch=getchar(); } while('0'<=ch&&ch<='9'){ x=x*10+ch-'0'; ch=getchar(); } return x*f; } inline int getIndex(int x,int y,int z){ return ((x-1)*b+(y-1))*c+z; } int main(){ A=getInt(); B=getInt(); C=getInt(); m=getInt(); a=A+1,b=B+1,c=C+1; int *data=new int[a*b*c]; int (*atk)[7]=new int[m+1][7]; for(int i=1;i<=A;i++) for(int j=1;j<=B;j++) for(int k=1;k<=C;k++) data[getIndex(i,j,k)]=getInt(); // for(int i=1;i<=m;i++){ for(int j=0;j<7;j++){ atk[i][j]=getInt(); } //执行攻击 for(int x=atk[i][0];x<=atk[i][1];x++) for(int y=atk[i][2];y<=atk[i][3];y++) for(int z=atk[i][4];z<=atk[i][5];z++){ data[getIndex(x,y,z)]-=atk[i][6]; if(data[getIndex(x,y,z)]<0){ cout<<i<<endl; delete []data; delete []atk; return 0; } } } delete []data; delete []atk; return 0; }
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 2018年蓝桥杯省赛(C/C++ C组)第二题 猴子分香蕉
- 第八届蓝桥杯c/c++省赛题目整理
- 【资源】2018年,你最需要的机器学习资料整理分享
- 蓝桥杯2014年以前JAVA历年真题及答案整理——A+B问题
- 2018年蓝桥杯B组JAVA题解(填空题)
- 2018年蓝桥杯总结
- 2018年第九届蓝桥杯【C++省赛B组】【第五题:快速排序】
- 2018年蓝桥杯赛后总结
- 【知识整理 | 全排列】蓝桥杯——带分数解法
- 蓝桥杯赛前整理
- 蓝桥杯2014年以前JAVA历年真题及答案整理——求和公式
- 蓝桥杯2018年国赛B组04--调手表
- 2018年第九届蓝桥杯【C++省赛B组】【第三题:乘积尾零】【附两个方法的代码】
- 2018年第九届蓝桥杯省赛B组C/C++部分答案
- [置顶] 2018年第九届蓝桥杯真题C/C++B组
- 2018年蓝桥杯赛后总结
- 蓝桥杯2018年真题解答(1)
- 2018年伊始的整理文档
- 蓝桥杯2014年以前JAVA历年真题及答案整理——Excel地址转换
- 蓝桥杯2014年以前JAVA历年真题及答案整理——区间k大数查询