这场cf的时间非常棒,但是还是因为一些事情耽误了一下,只a了前三题
首先是a题,给你三条边,问至少需要增加多少长度,可以使得三条边构成三角形
首先给三条边排个序,然后如果另外两条边之和大于最长的那条边 ,则输出0
否则,则输出最长边减另外两条边,然后加一
#include <bits/stdc++.h> #define INF 1e-7 using namespace std; int main() { int num[3]; cin>>num[0]>>num[1]>>num[2]; sort(num,num+3); if(num[2]<num[0]+num[1]) cout<<0<<endl; else{ num[2]++; cout<<num[2]-num[0]-num[1]<<endl; } }
然后,是b题,b题其实挺难的,但是当打个表之后找下规律就行了
题意: 给你一个a ,问有多少个x满足 a-(a xor x)-x=0;
打个表,发现规律 将a转成二进制,然后数有多少个1,那答案就是 2^k
#include <bits/stdc++.h> #define INF 1e-7 using namespace std; int main() { int t; int n; cin>>t; while(t--){ int ans=0; cin>>n; while(n>0){ if(n%2==1) ans++; n/=2; } long long sum=1; for(int i=0;i<ans;i++) sum*=2; cout<<sum<<endl; } return 0; }
然后是c题,给你一个字符串,问怎样排列这个字符串保证回文子串最多
其实只需要将相同字符的摆在一起就ok了
#include <bits/stdc++.h> #define INF 1e-7 using namespace std; int main() { char s[100005]; int n; cin>>n; cin>>s; sort(s,s+n); cout<<s<<endl; return 0; }
感觉这场还是比较简单的,比div3还简单