比赛7 总结
来源:互联网 发布:比淘宝便宜又好的网站 编辑:程序博客网 时间:2024/05/16 15:43
- T1
- 题面
- 题意
- 方法
- 代码
- T2
- 题面
- 题意
- 方法
- 代码
- T3
- 题面
- 题意
- 方法
- 队列使用方法
- 超时的模拟代码链表实现
- 代码
- T4
- 题面
- 题意
- 方法
- 代码
- T5
- 题面
- 题意
- 方法
- 代码
T1
题面
题意
输入一个数,输出最多个质数,使和为该数。
方法
尽量多打2,奇数则再加一个3.
代码
#include<bits/stdc++.h>using namespace std;int main(){ int n,i,k; cin>>n; k=n/2; if(n%2==1) { cout<<k<<endl<<3; for(i=1;i<=k-1;i++) { cout<<" "<<2; } } else { cout<<k<<endl; for(i=1;i<=k;i++) cout<<2<<" "; }}
T2
题面
题意
输入三个点的坐标,输出n和n个坐标,使四个点构成平行四边形。
方法
用其中两坐标之和等于其余两坐标之和的性质来做(平行四边形的对角线互相平分)
代码
#include<bits/stdc++.h>using namespace std;int main(){ int x,y,x2,y2,x3,y3,x4,y4; cin>>x>>y>>x2>>y2>>x3>>y3; cout<<3<<endl; x4=x+x2-x3; y4=y+y2-y3; cout<<x4<<" "<<y4<<endl; x4=x-x2+x3; y4=y-y2+y3; cout<<x4<<" "<<y4<<endl; x4=-x+x2+x3; y4=-y+y2+y3; cout<<x4<<" "<<y4<<endl;}
T3
题面
题意
输入n和n个字符D或R,循环进行杀人,D让第一个R删去。
方法
让D和R的序号分别入D,R两队列.分别出一个数,较小数+n后入原队列.
再判断两队列是否为空,输出非空的队列
队列使用方法
用queue<>来定义,<>内写队列内的数据类型,如int.
1.队列D.push(x)表示x如D队列.
2.D.pop()表示删去队首.
3.D.front()表示队首.
4.D.empty()是bool型的,true表示队列为空.
超时的模拟代码(链表实现)
#include<bits/stdc++.h>#define ll long long#define N 200010using namespace std;int b[N],c[N];int main(){ int len,x=0,y=0,tx=0,ty=0,i,n; string a; cin>>len; cin>>a; if(len==1) { cout<<a; return 0; } for(i=0;i<=len-1;i++) { if(a[i]=='D') x++; b[i]=i+1; c[i]=i-1; } b[len-1]=0; c[0]=len-1; y=len-x; n=0; while(1) { if(a[n]=='D') { if(tx==0) { y--; ty--; } else { tx++; c[b[n]]=c[n]; b[c[n]]=b[n]; } } else if(a[n]=='R') { if(ty==0) { x--; tx--; } else { ty++; c[b[n]]=c[n]; b[c[n]]=b[n]; } } if(x==0) { cout<<"R"; return 0; } else if(y==0) { cout<<"D"; return 0; } n=b[n]; }}
代码
#include<bits/stdc++.h>#define ll long longusing namespace std;queue<int> D,R;int main(){ int n,x,y,i; char a; cin>>n; for(i=1;i<=n;i++) { cin>>a; a=='D'?D.push(i):R.push(i); //"?"和":"的用法 "?"为条件,满足则执行"?"与":"间的操作.不满足则执行":"后的操作 } while(D.empty()==false&&R.empty()==false) { x=D.front();y=R.front(); D.pop();R.pop(); x<y?D.push(x+n):R.push(y+n); } D.empty()?cout<<"R":cout<<"D";}
T4
题面
题意
输入n,输出k,使(3^l)*k大于n,且n%(3^l)不为0.
要在(3^l)*k-n的值最小的情况下,k尽可能大.
方法
用while算出l的最小值,输出n/(3^l)+1即可.
代码
#include<bits/stdc++.h>#define ll long longusing namespace std;int main(){ ll n,k=3,i=1,j,m,ans=0; cin>>n; while(n%k==0) { k*=3; } cout<<n/k+1;}
T5
题面
题意
在n*n的正方形的边缘上有一些细胞,它们都要去另一边,每秒一格,且有m个坏点,行动时不能碰到坏点和其余细胞,则最多放几个细胞.
方法
用两个初值均为true的bool数组表示行和列,若与坏点有一坐标相同则变为false.
若n为奇数,则判断中间行和中间列,若均为true,则ans–.因为两细胞必然相撞.
其余行列的细胞若会向撞,则可将它换到正方形的另外一段.
代码
#include<bits/stdc++.h>#define ll long long#define N 1001using namespace std;ll n,m;bool hang[N],lie[N];int main(){ ll i,j,x,y,ans=0; cin>>n>>m; memset(hang,true,sizeof(hang)); memset(lie,true,sizeof(lie)); for(i=1;i<=m;i++) { cin>>x>>y; lie[y]=hang[x]=false; } for(i=2;i<=n-1;i++) { if(hang[i]==true) ans++; if(lie[i]==true) ans++; } if(n%2==1) { if(hang[n/2+1]==true&&lie[n/2+1]==true) ans--; } cout<<ans;}
阅读全文
1 0
- 16.7.7比赛总结
- 比赛7 总结
- 本次比赛总结(2017.10.7比赛)
- 比赛总结
- 比赛总结
- 比赛总结
- 比赛总结
- 比赛总结
- 比赛总结
- 比赛总结+近期总结
- 比赛总结+近期总结
- 8.8号比赛总结
- 总结小车比赛
- 蓝桥杯比赛总结
- 华中赛区比赛总结
- DIV3I比赛总结
- SRM 562 比赛总结
- SRM 563 比赛总结
- 动态广播注册源码分析
- RPG 游戏数值系统—1
- SQL函数
- Python的标准库sys、copy、os相关用法
- 53. Maximum Subarray
- 比赛7 总结
- Odoo10会计处理
- python:6:集合
- 五、MongoDB的基本数据类型
- 谈谈数据库的ACID
- for循环执行顺序
- 六、神奇MongoDB修改器
- Spring基于注解的零配置支持
- 在ArduPilot旋翼机上安装PX4Flow光流传感器