【Codeforces】A2组刷题记录(50 / 50)完结
目录
A1. Counterexample
A2. Good Number
A3. Dice Tower
★A4. Alyona and Numbers
A5. Mountain Scenery
rzt A6. Help Vasilisa the Wise 2
A7. Chewbaсca and Number
★A8. Ksenia and Pan Scales
★A9. Launch of Collider
A10. Polo the Penguin and Segments
★A11. IQ Test
★A12. Yaroslav and Permutations
★A13. Snow Footprints
★A14. Raising Bacteria
★A15. BowWow and the Timetable
★A16. Balanced Rating Changes
rzt A17. Word Capitalization
rzt A18. Next Round
rzt A19. Young Physicist
rzt A20. Bit++
★A21. Case of the Zeros and Ones
rzt A22. Translation
★A23. String Task
rzt A24. Laptops
★A25. Left-handers, Right-handers and Ambidexters
rzt A26. George and Accommodation
A27. Vasya the Hipster
A28. Fox And Snake
rzt A29. The New Year: Meeting Friends
A30. Elephant
A31. Greg's Workout
rzt A32. Ultra-Fast Mathematician
★A33. Little Pony and Crystal Mine
A34. One-dimensional Japanese Crossword
rzt A35. Soldier and Bananas
A36. Bus to Udayland
A37. Cookies
A38. Second Order Statistics
rzt A39. Nearly Lucky Number
rzt A40. Playing with Dice
rzt A41. A Good Contest
A42. Beautiful Year
★A43. Far Relative’s Birthday Cake
★A44. Mashmokh and Lights
rzt A45. Triangular numbers
rzt A46. Roma and Lucky Numbers
★A47. Toy Army
A48. Levko and Table
★A49. Cards
A50. Wizards' Duel
A1. Counterexample
Problem - A - Codeforces
题意:
求在 l 到 r 之间满足a,b的最大公约数等于 b ,c 的最大公约数等于 1 ,且 a,c的最大公约数不等于 1 的数 a,b ,c
三个for循环暴力查找+开long long
十年OI一场空,不开long long见祖宗
#include <iostream>
#define ll long long
using namespace std;ll gcd(ll a,ll b)
{return b? gcd(b,a%b):a;
}int main()
{ll l,r;cin>>l>>r;for(ll i=l;i<=r;i++)for(ll j=i;j<=r;j++)for(ll k=j;k<=r;k++)if(gcd(i,j)==1&&gcd(j,k)==1&&gcd(i,k)!=1){cout<<i<<' '<<j<<' '<<k;return 0;}cout<<-1;
}
A2. Good Number
Problem - A - Codeforces
题意:
第一行输入n和k n—n行数据
接下来n行输入n个数
如果该数的各个位数包含0~k的每个数 则该数为k-好数
求k-好数的个数
用标记法
#include <iostream>
#include <cmath>
using namespace std;int main()
{int n,k,x,sum=0,i;int index[9]={0};cin>>n>>k;while(n--){cin>>x;for(i=0;i<=k;i++) index[i]=0;while(x){index[x%10]=1;x/=10;}for(i=0;i<=k;i++)if(index[i]==0) break;if(i==k+1) sum++;}cout<<sum;
}
A3. Dice Tower
Problem - A - Codeforces
题意:
第一行输入骰子数n
第二行输入第一个骰子的顶面
接下来n行输入骰子的正面 和侧面
注意叠起来的骰子塔相连的部分应该是一样的
判断给定数据是否能叠成一个合格的骰子塔
我们只需要一个一个骰子分析
给的正面和侧面是否合格 不合格输出NO 反之YES
然后每次循环更新一下顶面数据即可
#include <iostream>
using namespace std;int main()
{int n,top,a,b;cin>>n;cin>>top;while(n--){cin>>a>>b;if(a==b||a+b==7||a==top||b==top||a==7-top||b==7-top){cout<<"NO";return 0;}top=7-top;}cout<<"YES";return 0;
}
★A4. Alyona and Numbers
Problem - A - Codeforces
题意:
给定两个数n, m(1 <= n,m <= 1000000)。分别从1~n, 1~m中选择两个数,使它们的和为5的倍数,求这样的数对共有多少(a+b, b+a视为不同的数对)。
暴力双for肯定不行的 会TLE(要不然也太简单了)
这题是数论题……啊烦人的数学
思路:
想要两个数相加为 5 的倍数,那它们除5的余数相加必须等于 5
或者两者除5的余数都为0
本题要计算满足两数之和是5倍数的数对个数
那么就是先各找出n m范围内余数为0 1 2 3 4的个数 存数组里
然后根据排列组合的原理算出结果即可(因为题目说a+b和b+a算不同的数对)
#include<bits/stdc++.h>
using namespace std;
long long n,m;
long long a[5],b[5];
int main()
{cin>>n>>m;for(int i=1;i<=n;i++) a[i%5]++;for(int i=1;i<=m;i++) b[i%5]++;cout<<a[0]*b[0]+a[1]*b[4]+a[2]*b[3]+a[3]*b[2]+a[4]*b[1]; //排列组合算出结果return 0;
}
A5. Mountain Scenery
Problem - A - Codeforces
题意:
第一行给出n k
第二行给出序列
比如: 3 2
0 5 3 5 1 5 2
其中偶数位 - 1仍然满足大于前后两个数 题目要求其中有2个下标为偶数的数相比输入的序列被减了1 也就是可以是0 4 3 4 1 5 2
这题有sqj 所以跟样例不同很正常
#include <iostream>
using namespace std;int main()
{int n,k,a[201],i;cin>>n>>k;for(i=1;i<=2*n+1;i++) cin>>a[i];for(i=2;i<=2*n+1;i+=2){if(a[i]-1>a[i-1]&&a[i]-1>a[i+1]) k--,a[i]--;if(k==0) break;}for(i=1;i<=2*n+1;i++) cout<<a[i]<<' ';
}
rzt A6. Help Vasilisa the Wise 2
Problem - A - Codeforces
题意:
有一个 2×2 的棋盘,有 9 个棋子,上面分别写着 1,2,3,…9。现在给出每行每列及每条对角线上两个棋子 的数之和,求相应的棋子摆放方法。无解输出 -1
暴力枚举即可 O(9^4)
#include <iostream>
using namespace std;int main()
{int r1,r2,c1,c2,d1,d2;cin>>r1>>r2>>c1>>c2>>d1>>d2;for(int i1=1;i1<=9;i1++)for(int i2=1;i2<=9;i2++)for(int i3=1;i3<=9;i3++)for(int i4=1;i4<=9;i4++)if(i1+i2==r1&&i3+i4==r2&&i1+i3==c1&&i2+i4==c2&&i1+i4==d1&&i2+i3==d2&&(i1!=i2)&&(i1!=i3)&&(i1!=i4)&&(i2!=i3)&&(i2!=i4)&&(i3!=i4)){cout<<i1<<' '<<i2<<endl<<i3<<' '<<i4;return 0;}cout<<-1;
}
A7. Chewbaсca and Number
Problem - A - Codeforces
题意:
#include <iostream>
#include <cmath>
using namespace std;int main()
{string a;cin>>a;for(int i=0;i<a.size();i++)a[i]=min(a[i],char(9+'0'-a[i]+'0'));if(a[0]=='0') a[0]='9';cout<<a;
}
★A8. Ksenia and Pan Scales
Problem - A - Codeforces
题意:
令人头大的一道题 烦死了呜呜
思路:
先计算天平两侧的初始个数 l 和 r
根据下图思路划定中位线(找规律)
然后进行分配 如果左右个数不等 则输出impossible
否则输出结果就行
#include <iostream>
using namespace std;int main()
{string l,r,a,b;int flag=0,len=0,ren=0;cin>>a>>b;int lenb=b.size();for(int i=0;i<a.size();i++){if(a[i]!='|'&&!flag) l+=a[i],len++;if(flag) r+=a[i],ren++;if(a[i]=='|') flag=1;}int mid=(lenb-(len-ren))/2; //mid为记录字符串b的中线for(int i=0;i<mid;i++) l+=b[i],len++;for(int i=mid;i<lenb;i++) r+=b[i],ren++;if(len!=ren){cout<<"Impossible";return 0;}cout<<l<<'|'<<r;
}
★A9. Launch of Collider
Problem - A - Codeforces
题意:
找规律即可发现只有 RL这种情况才能碰撞(一个向右 一个向左)
所以只要找到RL这种组合 然后循环比较出最小时间即可
时间=后面-前面 / (v1+v2)
注意0x3f3f3f3f是最大数
#include <iostream>
#include <cmath>
using namespace std;int main()
{int n,res=0x3f3f3f3f;string d;cin>>n>>d;int a[n];for(int i=0;i<n;i++)cin>>a[i];for(int i=1;i<n;i++)if(d[i-1]=='R'&&d[i]=='L')res=min(res,(a[i]-a[i-1])/2);if(res==0x3f3f3f3f) cout<<-1;else cout<<res;
}
A10. Polo the Penguin and Segments
Problem - A - Codeforces
题意:
这题根本不用管区间的l和r数是什么 只要管该区间所包含的整数数量
用sum把整数数量和求出 因为只能将区间扩展 意思是只能sum++
也就是求sum%k==0 时 sum++的次数
#include <iostream>
using namespace std;int main()
{int n,k,l,r,sum=0,cnt=0;cin>>n>>k;while(n--){cin>>l>>r;sum+=r-l+1;}while(sum%k!=0){sum++;cnt++;}cout<<cnt;
}
★A11. IQ Test
Problem - A - Codeforces
题意:
这题究极找规律 看了下面这篇题解 看完我顿悟了(没有)
但其实理解错了 我第一次以为是统计4×4的表格 但其实是统计2×2的表格
大佬的思路太强了 这方法的代码又简短又易懂 找规律yyds
#include <iostream>
using namespace std;int q(char ch)
{return ch=='.'? -1:1;
}int main()
{char a[4][4];int i,j,flag=0;for(i=0;i<4;i++)for(j=0;j<4;j++)cin>>a[i][j];for(i=0;i<3;i++)for(j=0;j<3;j++) //或运算 如果出现1 flag就为1flag|=q(a[i][j])+q(a[i+1][j])+q(a[i][j+1])+q(a[i+1][j+1]);if(!flag) cout<<"NO";//如果循环完flag都是0 则说明没有符合题意的2×2方格else cout<<"YES";
}
★A12. Yaroslav and Permutations
Problem - A - Codeforces
题意:
有一个数组,现在你要在有限的次数内移动相邻的两个数,最后是否能使数组中没有数字相同的相邻元素。
思路:
想要元素不相邻,即同一个元素要间隔放,已知相同一个元素最多可以这样
k a k b k c k n=7 k出现4次
即最多可以出现(n+1)/ 2次,只要k出现的次数小于该最大次数,就能实现间隔排放
其中k为该数组中出现次数最大的数
#include <iostream>
using namespace std;int main()
{int n,x,maxn=0,index[1001]={0};cin>>n;for(int i=1;i<=n;i++){cin>>x;index[x]++;if(maxn<index[x]) maxn=index[x];}if(maxn<=(n+1)/2) cout<<"YES";else cout<<"NO";
}
★A13. Snow Footprints
Problem - A - Codeforces
题意:
这题1300 而且是spj题 有1000种解法
思路:
三种情况:只有L 只有R 和RRLL这种 至于LLRR这种模拟一下就知道不可能
#include <iostream>
using namespace std;int main()
{int n;string s;cin>>n>>s;int lst=-1,led=-1,rst=-1,red=-1;for(int i=0;i<n;i++){if(s[i]=='R') red=i;if(s[i]=='L') led=i;if(rst==-1&&s[i]=='R') rst=i;if(lst==-1&&s[i]=='L') lst=i;}if(lst==-1) cout<<rst+1<<' '<<red+2;else if(rst==-1) cout<<led+1<<' '<<lst;else cout<<rst+1<<' '<<red+1; //+1是因为数组从0开始的 (字符串)
}
★A14. Raising Bacteria
Problem - A - Codeforces
题意:
每个细菌每天分裂成2个新细菌可以得到,要看到x个细菌就是求x里面有多少个2^n,2^n-1……2^0 由二进制的定义可得,这个题目就是求x在二进制下有多少个1
#include <iostream>
#include <cmath>
using namespace std;int main()
{int n,cnt=0;cin>>n;while(n){if(n%2==1) cnt++;n/=2;}cout<<cnt;
}
★A15. BowWow and the Timetable
Problem - A - Codeforces
题意:
我的思路是先把二进制转十进制 然后再在十进制数里找有多少个4的次方 cnt计数
但是卡第四个test 看了一下发现是精度问题(kao)
错误代码:
#include <iostream>
#include <cmath>
using namespace std;signed main()
{long long int n,sum=0,t=0,i=0,cnt=0;cin>>n;while(n){sum+=n%10*pow(2,i++);n/=10;}i=0;while(t<sum){t=pow(4,i++);if(t>=sum) break;cnt++;}cout<<cnt;
}
AC代码:
#include <iostream>
using namespace std;int main()
{int cnt=0;string s,p="1";cin>>s;while(s.size()>=p.size()){if(s>p) cnt++;p+="00";}cout<<cnt;
}
★A16. Balanced Rating Changes
Problem - A - Codeforces
题意:
由题可知
- ai为偶数 则bi=ai / 2
- ai为奇数 因为题目保证最后和为0 说明ai为奇数的个数肯定为偶数个(因为奇数+奇数=奇数)那么只要一半人向上取整 另外一半向下取整
#include <iostream>
using namespace std;int main()
{int n,x,flag=1;cin>>n;while(n--){cin>>x;if(x%2) cout<<(x+flag)/2<<endl,flag*=-1;else cout<<x/2<<endl;}
}
rzt A17. Word Capitalization
Problem - A - Codeforces
题意:
将首字母大写
#include<bits/stdc++.h>
using namespace std;int main()
{string s;cin>>s;if(s[0]>='a'&&s[0]<='z') s[0]-=32;cout<<s;
}
rzt A18. Next Round
Problem - A - Codeforces
题意:
第一行分别输入 n k
n代表参赛人数 k代表排名前k位的都能晋级(和第k位并列的也可以)
问有多少人能晋级
其中0分的不算在晋级里边
#include<bits/stdc++.h>
using namespace std;bool cmp(int a,int b)
{return a>b;
}int main()
{int n,k,cnt=0,s=0;cin>>n>>k;int a[n];for(int i=1;i<=n;i++)cin>>a[i];sort(a+1,a+n+1,cmp);for(int i=1;i<=n;i++)if(a[i]>=a[k]&&a[i]!=0) cnt++;cout<<cnt;
}
rzt A19. Young Physicist
Problem - A - Codeforces
题意:
坐标矢量和为0 输出YES 否则输出NO
#include<bits/stdc++.h>
using namespace std;typedef struct
{int x,y,z;
}sp;int main()
{int n,xz=0,yz=0,zz=0;cin>>n;sp p[101];for(int i=0;i<n;i++){cin>>p[i].x>>p[i].y>>p[i].z;xz+=p[i].x;yz+=p[i].y;zz+=p[i].z;}if(xz==0&&yz==0&&zz==0) cout<<"YES";else cout<<"NO";
}
rzt A20. Bit++
Problem - A - Codeforces
题意:
输入n
接下来n行输入字符串
x++和++x表示+1 x--和--x表示-1
输出结果 其中起始sum=0
#include<bits/stdc++.h>
using namespace std;int main()
{string s;int n,sum=0;cin>>n;while(n--){cin>>s;if(s[1]=='+') sum++;else sum--;}cout<<sum;
}
★A21. Case of the Zeros and Ones
Problem - A - Codeforces
题意:
第一行输入n 表示字符串的长度
如果有1和0相连就删掉 问最后剩下几个字符
比如1100——10——空
再比如110010——1010——10——空
11110001——111001——1101——11——2个
因为10总是连在一块删掉的 所以只要配对的删掉 就是剩下的
所以要做的就是1和0配对 比如110010 ——3个1 3个0则都配对成功 所以剩下0个字符
#include<bits/stdc++.h>
using namespace std;int main()
{string s;int n,a=0,b=0;cin>>n>>s;for(int i=0;i<n;i++)if(s[i]=='1') a++;else b++;cout<<fabs(a-b);
}
rzt A22. Translation
Problem - A - Codeforces
题意:
字符串翻转就是对的 输出YES
其他情况都是 NO 这题用reverse函数就是秒解
#include<bits/stdc++.h>
using namespace std;int main()
{string s,t;cin>>s>>t;reverse(s.begin(),s.end());if(s==t) cout<<"YES";else cout<<"NO";
}
★A23. String Task
Problem - A - Codeforces
题意:
根据规则改字符串并输出
- 把大写都改成小写
- 遇到元音字母删除(a e i o u y)
- 遇到辅音字母前加.字符
我刚开始想的是字符数组 太麻烦了 要加要减的操作都很麻烦
这题教会我一个方法就是——一边改变一边输出
遇到元音字母就跳过不管 遇到辅音字母就cout<<'.'<<s[i]
#include<bits/stdc++.h>
using namespace std;int main()
{string s;cin>>s;for(int i=0;i<s.size();i++){if(s[i]>='A'&&s[i]<='Z') s[i]+=32;if(s[i]!='a'&&s[i]!='e'&&s[i]!='i'&&s[i]!='o'&&s[i]!='u'&&s[i]!='y')cout<<'.'<<s[i];}
}
rzt A24. Laptops
Problem - A - Codeforces
题意:
第一行输入n 代表n台电脑
题目说只要出现一台电脑质量比价格高 就输出“Happy Alex”
#include<bits/stdc++.h>
using namespace std;int main()
{int n,x,y,flag=1;cin>>n;while(n--){cin>>x>>y;if(x<y) flag=0;}if(flag)cout<<"Poor Alex";else cout<<"Happy Alex";
}
★A25. Left-handers, Right-handers and Ambidexters
Problem - A - Codeforces
题意:
l代表有l个人只能用左手 r代表有r个人只能用右手 a代表有a个人既能用左手也能用右手
输出一个整数,代表这个队伍里最多有多少人,如果组不成这样的队伍,则输出0
思路:
比如 6 2 7 先把右手不足的给他补上 变成6 6 3 然后再平均分配 7 7 1
此时这个1给谁都无所谓了因为结果就是 l 和 r 中最小的数×2
靠 刚开始写的呢代码简直就是if开会 下面这个代码跟第一次写的比起来简直通俗易懂
#include<bits/stdc++.h>
using namespace std;int main()
{int l,r,a;cin>>l>>r>>a;while(a){if(l>=r) r++;else l++;a--;}cout<<min(l,r)*2;
}
rzt A26. George and Accommodation
Problem - A - Codeforces
题意:
太弱智了 我都不想写题意哈哈
n代表房间数 接下来n行输入p——已住人数 q——房间容量
问有几间房能再塞下两个人
#include<bits/stdc++.h>
using namespace std;int main()
{int n,p,q,cnt=0;cin>>n;while(n--){cin>>p>>q;if(q-p>=2) cnt++;}cout<<cnt;
}
A27. Vasya the Hipster
Problem - A - Codeforces
题意:
输入a代表红袜子个数 输入b代表蓝袜子个数
输出能有几天混穿 有几天能穿一双纯色
所以能混穿的天数就是a b小的值
剩下的除2就是穿纯色的天数
#include<bits/stdc++.h>
using namespace std;int main()
{int a,b,minx,maxn;cin>>a>>b;maxn=max(a,b);minx=min(a,b);cout<<minx<<' '<<(maxn-minx)/2;
}
A28. Fox And Snake
Problem - A - Codeforces
题意:
矩阵的控制 画蛇 调试就完事了
#include<bits/stdc++.h>
using namespace std;int main()
{int m,n,flag=-1;cin>>m>>n;for(int i=1;i<=m;i++){if(i%2==0) flag=-flag;for(int j=1;j<=n;j++){if(i%2!=0) cout<<'#';else if(flag==1&&j==n)cout<<'#';else if(flag==-1&&j==1) cout<<'#';else cout<<'.';}cout<<endl;}
}
rzt A29. The New Year: Meeting Friends
Problem - A - Codeforces
题意:
给三个数 在中间那个数汇合 问最大到中间和最小到中间的距离之和 其实就是最大-最小
#include<bits/stdc++.h>
using namespace std;int main()
{int a[3];for(int i=0;i<3;i++)cin>>a[i];sort(a,a+3);cout<<a[2]-a[0];
}
A30. Elephant
Problem - A - Codeforces
题意:
输入一个n 有1 2 3 4 5可以凑这个数 问如何用最少的个数凑n
要想有最少的个数 那就用最大的5去凑 通过规律推出三种情况
#include<bits/stdc++.h>
using namespace std;int main()
{int n;cin>>n;if(n<=5) cout<<1;else if(n%5!=0) cout<<n/5+1;else cout<<n/5;
}
A31. Greg's Workout
Problem - A - Codeforces
题意:
思路没啥问题 一直卡的点是因为数组开小了 我下标从1开始的 所以应该开a[n+1]
#include<bits/stdc++.h>
using namespace std;int main()
{int n,cnt=0,s1=0,s2=0,s3=0;cin>>n;int a[n+1];for(int i=1;i<=n;i++){cin>>a[i];cnt++;if(cnt==1) s1+=a[i];else if(cnt==2) s2+=a[i];else {s3+=a[i];cnt=0;}}int maxn=max(max(s1,s2),s3);if(maxn==s1) cout<<"chest";else if(maxn==s2) cout<<"biceps";else cout<<"back";
}
rzt A32. Ultra-Fast Mathematician
Problem - A - Codeforces
题意:
给你两长度相同的字符串 要求做异或运算 其中1+1=0 1+0=1 0+0=0
#include<bits/stdc++.h>
using namespace std;int main()
{string s1,s2;cin>>s1>>s2;for(int i=0;i<s1.size();i++){if(s1[i]-'0'+s2[i]-'0'==1) cout<<1;else if(s1[i]-'0'+s2[i]-'0'==0) cout<<0;else cout<<0;}
}
★A33. Little Pony and Crystal Mine
Problem - A - Codeforces
题意:
打印题 让我想起天梯赛的打印沙漏 真是可怕
#include<bits/stdc++.h>
using namespace std;int main()
{int n,t=1,i,j;cin>>n;for(i=1;i<=n/2+1;i++){for(j=1;j<=(n-t)/2;j++) cout<<'*';for(j=1;j<=t;j++) cout<<'D';for(j=1;j<=(n-t)/2;j++) cout<<'*';t+=2;cout<<endl;}t-=4;for(i=1;i<=n/2;i++){for(j=1;j<=(n-t)/2;j++) cout<<'*';for(j=1;j<=t;j++) cout<<'D';for(j=1;j<=(n-t)/2;j++) cout<<'*';t-=2;cout<<endl;}
}
A34. One-dimensional Japanese Crossword
Problem - A - Codeforces
题意:
例如BWBBBWWBW 有三组B 这三组B的个数分别是1 3 1
所以输出就是
3
1 3 1
思路就是找子串 其他的也没啥难度
#include<bits/stdc++.h>
#define int long long
using namespace std;signed main()
{int n,cnt=0,sum=0,k=0;string s;cin>>n;cin>>s;int a[n];for(int i=0;i<n;i++)if(s[i]=='B'){sum++;if(s[i+1]=='W'||s[i+1]=='\0') cnt++,a[k++]=sum,sum=0;}cout<<cnt<<endl;for(int i=0;i<cnt;i++)cout<<a[i]<<' ';
}
rzt A35. Soldier and Bananas
Problem - A - Codeforces
题意:
#include<bits/stdc++.h>
using namespace std;int main()
{int k,n,w,sum=0;cin>>k>>n>>w;for(int i=1;i<=w;i++)sum+=k*i;if(sum>n) cout<<sum-n;else cout<<0;
}
A36. Bus to Udayland
https://codeforces.com/contest/711/problem/A
题意:
有n排座位,每排座位包含左右两部分,被
|
分隔,其中O代表没人坐,X
代表有人坐。 问你是否存在连续的两个座位没人坐,存在输出YES
,并把这两个座位改为++
。 输出修改以后的情况,不存在输出NO
。
#include <iostream>
using namespace std;int main()
{int n,i,j,flag=0;char s[1010][8];cin>>n;for(i=0;i<n;i++)for(j=0;j<5;j++){cin>>s[i][j];if(s[i][0]=='O'&&s[i][1]=='O'&&flag!=1){flag=1;s[i][0]='+',s[i][1]='+';}else if(s[i][3]=='O'&&s[i][4]=='O'&&flag!=1){flag=1;s[i][3]='+',s[i][4]='+';}}if(!flag) cout<<"NO";else{cout<<"YES"<<endl;for(i=0;i<n;i++){for(j=0;j<5;j++)cout<<s[i][j];cout<<endl;}}
}
A37. Cookies
https://codeforces.com/contest/129/problem/A
题意:
有n袋饼干(1≤n≤100),每袋里有1≤ai≤100块饼干。拿走一袋饼干,使剩下的饼干数为偶数。求有多少种拿走的方案。
思路:
只要存在奇数个奇数 则需要拿走奇数的饼干
偶数个奇数和为偶数 那么拿走偶数的饼干即可
#include <iostream>
using namespace std;int main()
{int n,x,even=0,odd=0;cin>>n;for(int i=0;i<n;i++){cin>>x;if(x%2==0) even++;else odd++;}if(odd%2==0) cout<<even;else cout<<odd;
}
A38. Second Order Statistics
https://codeforces.com/contest/22/problem/A
题意:
给定一个数组,输出其中第二小的整数(相等的整数只计算一次)
用set很好做 只要把第一个删掉 再用s.begin()就行
#include <iostream>
#include <set>
using namespace std;int main()
{set<int>s;int n,x;cin>>n;int t=n;while(n--){cin>>x;s.insert(x);}if(t<2||s.size()==1){cout<<"NO";return 0;}s.erase(s.begin());cout<<*s.begin();
}
rzt A39. Nearly Lucky Number
https://codeforces.com/contest/110/problem/A
题意:
如果一个数仅包含4和7,那么它就是一个"幸运数字"。 如果一个数本身不是幸运数,但是它所含有的数字4和7的个数之和为一个"幸运数字",那么它就是一个"类幸运数字"。 给您一个数,请编程判断它是不是"类幸运数字"。
#include <iostream>
using namespace std;int main()
{string s;int cnt=0;cin>>s;for(int i=0;i<s.size();i++){if(s[i]=='4'||s[i]=='7') cnt++;}if(cnt!=0&&(cnt==4||cnt==7)) cout<<"YES";else cout<<"NO";
}
rzt A40. Playing with Dice
https://codeforces.com/contest/378/problem/A
题意:
两个人正在玩游戏。每人写一个 1~6 之间的数,然后掷骰子。写下的数字和骰子上的数最接近的那个人获胜。如果两个人写的数和骰子上的数差距都是一样的,那么是平局。
第一个人写的数是 a,第二个人写的数是 b。 请分别输出第一个人赢、平局、第二个人赢有多少种可能(方法数)。
#include <iostream>
#include <cmath>
using namespace std;int main()
{int a,b,aw=0,bw=0,dr=0;cin>>a>>b;for(int i=1;i<=6;i++){if(abs(a-i)<abs(b-i)) aw++;else if(abs(a-i)==abs(b-i)) dr++;else bw++;}cout<<aw<<' '<<dr<<' '<<bw;
}
rzt A41. A Good Contest
https://codeforces.com/contest/681/problem/A
题意:
如果出现比赛之前即为红色等级(分>=2400)且分数有长进的 输出YES
#include <iostream>
using namespace std;typedef struct
{string s;int a;int b;
}stu;int main()
{stu p[101];int n,flag=0;cin>>n;for(int i=0;i<n;i++){cin>>p[i].s>>p[i].a>>p[i].b;if(p[i].a>=2400&&p[i].b-p[i].a>0)flag=1;}if(flag) cout<<"YES";else cout<<"NO";
}
A42. Beautiful Year
https://codeforces.com/contest/271/problem/A
题意:
给定一个年份n,输出大于n的第一个四位数字都不相同的年份。
这题是天梯赛L1 出生年的降级版哈哈
#include <iostream>
using namespace std;int main()
{int y,a[4];cin>>y;while(1){y++;a[0]=y/1000;a[1]=y/100%10;a[2]=y/10%10;a[3]=y%10;if(a[0]!=a[1]&&a[0]!=a[2]&&a[0]!=a[3]&&a[1]!=a[2]&&a[1]!=a[3]&&a[2]!=a[3])break;}cout<<y;
}
★A43. Far Relative’s Birthday Cake
https://codeforces.com/contest/629/problem/A
题意:
输入格式:
第一行输入一个整数n(1<=n<=100),表示蛋糕边的长度。然后输入n行数,每行有n个字符。空的细胞用'.'表示,而含有巧克力的细胞用“C”表示。
输出格式:
输出“家庭之门”幸福感的价值,即同一行或同一列的一对巧克力片的数量
思路:
注意:像C C C这种序列 一对巧克力的数量应该是3对 (1,2)(1,3)(2,3)
所以也就是高斯求和公式n*(n-1)/2
其实找规律也可以得出:3个C=2+1 4个C=3+2+1 5个C=4+3+2+1
则用一个双for 同时记录每一行每一列C的个数 然后用高斯求和公式计算求和即可
#include <iostream>
using namespace std;int main()
{int n,i,j,h,l,sum=0;char s[101][101];cin>>n;for(i=0;i<n;i++)for(j=0;j<n;j++)cin>>s[i][j];for(i=0;i<n;i++){h=0,l=0;for(j=0;j<n;j++){if(s[i][j]=='C') l++; //代表每列的C的个数if(s[j][i]=='C') h++; //代表每行的C的个数}sum+=(l-1)*l/2+(h-1)*h/2;}cout<<sum;}
★A44. Mashmokh and Lights
https://codeforces.com/contest/415/problem/A
题意:
有编号为1 - n共n个灯。按下i号开关后,所有编号≥i的灯都会被关掉。给出n, m两个数,分别表示灯的数量和按下的开关数,输出每个灯被第一次关掉时开关的编号。
#include <iostream>
using namespace std;int main()
{int n,m,x;cin>>n>>m;int a[101]={0};while(m--){cin>>x;for(int i=x;i<=n;i++)if(a[i]==0) a[i]=x;}for(int i=1;i<=n;i++)cout<<a[i]<<' ';
}
rzt A45. Triangular numbers
#include <iostream>
using namespace std;int main()
{int n,i;cin>>n;for(i=1;i<32;i++)if(i*(i+1)/2==n){cout<<"YES";return 0;}cout<<"NO";
}
rzt A46. Roma and Lucky Numbers
https://codeforces.com/contest/262/problem/A?f0a28=1
题意:
刚开始没看清题 意思是4和7是幸运数字
n指给出n个数 问有几个数满足幸运数字出现次数<=k
输出满足条件的个数
#include <iostream>
using namespace std;int main()
{int n,k,sum=0;string s;cin>>n>>k;while(n--){int cnt=0;cin>>s;for(int i=0;i<s.size();i++)if(s[i]=='4'||s[i]=='7') cnt++;if(cnt<=k) sum++;}cout<<sum;
}
★A47. Toy Army
https://codeforces.com/contest/84/problem/A
题意:
这题说实话 没看懂题是啥意思……待补
#include<iostream>
using namespace std;
long long n;int main()
{cin>>n;cout<<n/2*3;
}
A48. Levko and Table
https://codeforces.com/contest/361/problem/A
题意:
Levko 很喜欢幻方,他想构造一个长宽都是 n 且每行每列的和都是 k 的幻方
spj题 要满足每行每列和都为k 最简单的方法就是对角线是k
#include <iostream>
using namespace std;int main()
{int n,k,a[101][101];cin>>n>>k;for(int i=0;i<n;i++){for(int j=0;j<n;j++){if(i==j) a[i][j]=k;else a[i][j]=0;cout<<a[i][j]<<' ';}cout<<endl;}
}
★A49. Cards
https://codeforces.com/contest/701/problem/A
题意:
现在有n张卡牌(n为偶数),每张卡牌上都写着一个正整数。有n/2个人要玩这个卡牌游戏,在游戏开始时每个人会得到两张卡牌,每张卡牌只能给一个玩家。 现在让你发卡牌,使每一个人手上的卡片上所写的数字的总和相等。数据保证有发牌的方案符合题目要求。
思路:
因为题目保证肯定能凑 所以直接sort排序
然后两头取就ok了 注意用结构体记录原序列的下标
毕竟答案要求输出的是原序列的下标
#include <iostream>
#include <algorithm>
using namespace std;typedef struct
{int idx,val;
}st;bool cmp(st a,st b)
{return a.val<b.val;
}int main()
{st a[101];int n;cin>>n;for(int i=1;i<=n;i++){cin>>a[i].val;a[i].idx=i;}sort(a+1,a+n+1,cmp);for(int i=1;i<=n/2;i++)cout<<a[i].idx<<' '<<a[n+1-i].idx<<endl;
}
A50. Wizards' Duel
https://codeforces.com/contest/591/problem/A
题意:
第一行输入一个整数 l (1<=l<=1000 )-----走廊长度
第二行输入正整数 p ,第三行输入正整数 q -----分别代表哈利波特与伏地魔施展的魔法的飞行速度。
输出一个正数-----从哈利波特的位置到两个咒语第二次碰撞位置的距离。
思路:
画个图发现其实第二次碰撞就是第一次碰撞的位置
所以用时间t=l/(a+b) 乘以哈利的魔法速度a即可
#include <iostream>
#include <stdio.h>
using namespace std;int main()
{double l,a,b;cin>>l;cin>>a;cin>>b;printf("%f",l/(a+b)*a);
}
【Codeforces】A2组刷题记录(50 / 50)完结相关推荐
- 【Codeforces】A3组刷题记录( 43 / 43 )
目录 A1. Combination Lock A2. Summer Camp rzt A3. Soft Drinking ★A4. Coder ★A5. GukiZ and Contest ★A6. ...
- [USACO] Gold组刷题记录
题目取自BZOJ,为了查找方便,Gold组将收录进同一篇博客 1717: [Usaco2006 Dec]Milk Patterns 产奶的模式 二分答案(长度)+ Hash 记录出现次数 1 #inc ...
- Codeforces 刷题记录(已停更)
Codeforces 每日刷题记录 (已停更) 打'+'是一些有启发意义的题目,部分附上一句话题解,每日更新3题,大部分题目较水. Day ID Problem Tutorial Note 1 1 + ...
- BZOJ刷题记录---提高组难度
BZOJ刷题记录---提高组难度 总目录详见https://blog.csdn.net/mrcrack/article/details/90228694 序号 题号 算法 思想难度 实现难度 总难度 ...
- 【Python爬虫实战】codeforces刷题记录小助手
先看效果图. 输入codeforces的用户名,可以查询用户的rating信息.以及参加比赛的信息(大星参数的不计算在内).还有总的AC数. 一.需求分析 找到显示用户参加contest信息的url. ...
- 算法笔记CodeUp第一至第六章刷题记录
文章目录 <算法笔记>2.2小节--C/C++快速入门->顺序结构 1.例题1-1-1 按要求输出信息(1) 2.例题1-1-2 按要求输出信息(2) 3.例题1-2-1 求两个整数 ...
- Pythontip刷题记录
pythontip 刷题记录 11.给你一个正整数列表 L, 输出L内所有数字的乘积末尾0的个数.(提示:不要直接相乘,数字很多,相乘得到的结果可能会很大). 不能直接相乘会太大了,分解质因数,去找2 ...
- ACM比赛经验、刷题记录及模板库总结(更新中)
前言 本文所提及的部分题目代码,可以在我的Github上找到 第一部分 经验分享及感受 第二部分 刷题记录 一.基础算法&程序语言 //strlen()函数的复杂度是O(n)要小心 //截取字 ...
- 2024届毕业生的刷题记录
2024届毕业生的刷题记录 LeetCode 热题 HOT 100 两数之和 两数相加 无重复字符的最长子串 寻找两个正序数组的中位数 最长回文子串 N字形变换 整数反转 字符串转换整数 回文数 正则 ...
最新文章
- R构建Kmeans聚类模型
- 【Java每日一题】20161128
- .Net 下载网络图片
- pta c语言 凯撒密码
- 【基本算法--高精度计算】大整数相加
- 软件运行 计算机硬件环境,软件运行环境该怎么写
- 箱线图画法详解:颜色、标签、大小等
- 吐血推荐:无解的完成图
- 大O记法-BigO notation
- 国产AIoT SoC芯片
- OpenCV学习笔记03:缩放裁剪图像与调整图像色调
- pyqt5 图像上划线_PyQt5 绘制画 线(鼠标笔)
- js、jquery操作复选框checkbox总结(单个/多个获取选中值、初始化设置默认选中值、全选反选)
- 齐供应TAPPI四碘化5,10,15,20-四(对-N,N,N三甲基苯胺基)卟啉敏化的钛酸盐纳米管(TAPPI-TNTs)高效的可见光催化剂岳
- win10,win11后在cmd命令行输入python自动调用微软应用商店
- servlet cannot be resolved to a type的原因及解决方法
- 【译文】工作六年后,我对软件开发的认知转变
- java集成paypal支付,含Android,服务端代码
- 浅谈常见的七种加密算法及实现
- laravel开源php棋牌,Simpla: Simpla 是基于 Laravel 的 PHP 框架进行开发的一款开源免费的内容管理系统(CMS)...
热门文章
- 【设计模式C++】工厂模式
- 95后阿里P7晒出工资单:狠补了这个,真香...
- 微信分享功能android,关于Android实现简单的微信朋友圈分享功能
- 用java 发送邮件 版本2(根据配置文件 选择发送情话或者励志文)
- matlab级联算法,IIR滤波器的MATLAB实现(级联型)
- discuz帖子列表页调用帖子作者头像
- 分数乘法计算机题,【六年级分数乘法计算练习题】
- 何金龙 mysql_办innodb
- Vue、VueCLI(脚手架)安装、使用详细步骤
- python json文件操作_JSON文件及Python对JSON文件的读写操作