FYN OI奋斗之路5~
来源:互联网 发布:mac图片文件夹在哪里 编辑:程序博客网 时间:2024/06/04 19:36
- XJOI奋斗群群赛7解题报告本周总结
- 原题
- A - Bachgold Problem
- 题意
- 题解
- B - Parallelogram is Back
- 题意
- 题解
- C - Voting
- 题意
- 题解
- D - Secrets
- 题意
- 题解
- E - Chips
- 题意
- 题解
- 本周总结
XJOI奋斗群群赛7解题报告+本周总结
原题
https://cn.vjudge.net/contest/184260
A - Bachgold Problem
题意
输入一个数n,求出最多能将其分解为多少质数和,并输出这些质数。
题解
水题,偶数分解为n/2个2,奇数分解为3和(n-3)/2个2即可。
#include<bits/stdc++.h>using namespace std;int main(){ int n,count=0; cin>>n; if(n%2==0){ cout<<n/2<<endl; for(int i=1;i<=n/2;i++){ cout<<2<<" "; } } else{ cout<<n/2<<endl; for(int i=1;i<n/2;i++){ cout<<2<<" "; } cout<<3; }}
B - Parallelogram is Back
题意
输入平行四边形的3个点,输出第四个点可能的位置。
题解
水题,第四个点显然有三个位置,注意除2时用double即可。
#include<bits/stdc++.h>using namespace std;int main(){ double x[100],y[100],c[100],d[100]; for(int i=1;i<=3;i++){ cin>>x[i]>>y[i]; } c[1]=(x[1]+x[2])/2.0; c[2]=(x[1]+x[3])/2.0; c[3]=(x[2]+x[3])/2.0; d[1]=(y[1]+y[2])/2.0; d[2]=(y[1]+y[3])/2.0; d[3]=(y[2]+y[3])/2.0; cout<<3<<endl; cout<<c[1]-(x[3]-c[1])<<" "<<d[1]-(y[3]-d[1])<<endl; cout<<c[2]-(x[2]-c[2])<<" "<<d[2]-(y[2]-d[2])<<endl; cout<<c[3]-(x[1]-c[3])<<" "<<d[3]-(y[1]-d[3])<<endl;}
C - Voting
题意
n个人进行投票,分为两个党派,轮到某个有投票权人时,他可以否决另一个党派的人的投票权,按此循环直至剩下最后一个人,他的党派即胜利的党派。
题解
建两个队列,分别存储党派为D,R的人的编号,之后模拟否决的操作即可。
#include<bits/stdc++.h>using namespace std;char c[200010];int num[200010];int main() { int n; cin>>n; memset(num,0,sizeof(num)); queue <int> d; queue <int> r; cin>>c; for(int i=0; i<n; i++) { if(c[i]=='D') d.push(i); else r.push(i); } while(!d.empty()&&!r.empty()) { for(int i=0; i<n; i++) { if(num[i]) { continue; } if(c[i]=='D') { int temp1; temp1=d.front(); d.pop(); int temp2; temp2=r.front(); r.pop(); num[temp2]=1; d.push(temp1); } else { int temp1; temp1=r.front(); r.pop(); int temp2; temp2=d.front(); d.pop(); num[temp2]=1; r.push(temp1); } if(d.empty()||r.empty()) { break; } } } if(!d.empty()) { cout<<"D"; return 0; } else { cout<<"R"; return 0; }}
D - Secrets
题意
大意是一个国家,它的货币面值只有3的幂,给出一个n值,假设n无法由目前所有的硬币组合成,那么求在多花最少钱的情况下最多用多少枚硬币。
题解
n不断除3,若无法整除3,则等于n/3+1。
#include<bits/stdc++.h>using namespace std;int main(){ long long int n,t,ans; cin>>n; if(n%3!=0){ ans=n/3+1; } else if(n%3==0){ t=3*3; while(t){ if(t==n){ ans=1; break; } if(n%t!=0){ ans=n/t+1; break; } else{ t=t*3; } } } cout<<ans; return 0;}
E - Chips
题意
一个n*n的矩阵的边框上(不包括四个角落)放棋子,有m个不能过的点,要求每个棋子走到对面,棋子不能相撞,求最多棋子数。
题解
一个不能过的点可以废掉它所在一行和一列,其他行列不会影响。
#include<bits/stdc++.h>using namespace std;const int MAXN=10000;int a[MAXN]={0},b[MAXN]={0};int main(){ int n,m; cin>>n>>m; int ans1=n-2,ans2=n-2; int x,y; for(int i=1;i<=m;i++){ cin>>x>>y; a[x]=1; b[y]=1; } for(int i=2;i<=n-1;i++){ if(a[i]==1) ans1--; if(b[i]==1) ans2--; } int ans=ans1+ans2; if(n%2==1&&a[(n+1)/2]==0&&b[(n+1)/2]==0) { ans--; } cout<<ans;}
本周总结
这周比赛的题目基本上AB是水题,后面的题目就比较难了,有比较多是要用到数据结构的,然而这块掌握的并不是特别好,其他的不足点还是有些粗心吧,包括数据范围和输出内容上还是时有错误,另外有些分类讨论的思维题也会考虑不全。还有就是心态问题,一题做不出来比较容易被卡住。下周,划水的AB题就要离我们而去了2333。
最后贴出czl和吴老师常说的话:学信息的人永不服输!
2017年9月10日
- FYN OI奋斗之路5~
- FYN OI奋斗之路1~
- FYN OI奋斗之路2~
- FYN OI奋斗之路3~
- FYN OI奋斗之路4~
- FYN OI奋斗之路6~
- FYN OI 奋斗之路7~
- FYN OI 奋斗之路8~
- FYN OI奋斗之路9~
- FYN OI 奋斗之路10~
- FYN OI奋斗之路11~
- OI 酱油之路
- OI之路
- OI之路就此终结
- czl蒻蒟的OI之路5
- 奋斗之路
- 奋斗之路
- 奋斗之路
- [LeetCode] 115: Swap Nodes in Pairs
- [LeetCode] 116: Symmetric Tree
- 面试题46. 求1+2+...+n
- [LeetCode] 117: Text Justification
- [LeetCode] 118: Trapping Rain Water
- FYN OI奋斗之路5~
- [LeetCode] 119: Triangle
- [LeetCode] 120: Two Sum
- [LeetCode] 121: Unique Binary Search Trees
- [LeetCode] 122: Unique Binary Search Trees II
- handler实现页面切换,小红点跟随移动
- [LeetCode] 123: Unique Paths
- 国外物联网平台初探(三) ——IBM Watson IoT
- [LeetCode] 124: Unique Paths II