首页 > 代码库 > Codeforces Round #410 (Div. 2)
Codeforces Round #410 (Div. 2)
A题
分析:把串反转,判不一样的个数,不同个数恰好为2个或者为0个且串的长度为奇数就输出YES,否则为NO
1 #include "iostream" 2 #include "cstdio" 3 #include "cmath" 4 #include "cstring" 5 using namespace std; 6 string s; 7 void Rev(string &str){ 8 int i=0,j=str.length()-1; 9 while(i<j){ 10 swap(str[i],str[j]); 11 i++,j--; 12 } 13 } 14 int main() 15 { 16 while(cin>>s){ 17 string p=""; 18 for(int i=0;i<s.length();i++) 19 p+=s[i]; 20 Rev(p); 21 int cnt=0; 22 int n=s.length(); 23 for(int i=0;i<n;i++){ 24 if(s[i]!=p[i]) 25 cnt++; 26 } 27 if(cnt==2||((n%2)&&cnt==0)) 28 cout<<"YES"<<endl; 29 else 30 cout<<"NO"<<endl; 31 } 32 }
B题
C题
分析:如果gcd>1则直接输出YES,0.否则其他情况,我们考虑把他全变成偶数所需要的最少操作。如果a[i],a[i+1]全是奇数,则只需要一次操作即可,如果a[i],a[i+1]一奇一偶,则需要两次变化,最后直接统计即可。
1 #include "iostream" 2 #include "cstdio" 3 #include "algorithm" 4 #include "cstring" 5 using namespace std; 6 const int maxn=100000+10; 7 long long a[maxn],b[maxn]; 8 int n; 9 long long gcd(long long a,long long b){ 10 if(b==0) return a; 11 return gcd(b,a%b); 12 } 13 int main() 14 { 15 while(cin>>n) 16 { 17 cin>>a[0]>>a[1]; 18 long long g=gcd(a[0],a[1]); 19 for(int i=2;i<n;i++){ 20 cin>>a[i]; 21 g=gcd(g,a[i]); 22 } 23 if(g>1){ 24 cout<<"YES"<<endl; 25 cout<<"0"<<endl; 26 continue; 27 } 28 long long cnt=0; 29 for(int i=0;i<n-1;i++){ 30 if(a[i]%2==0) continue; 31 if((a[i]%2)&&(a[i+1]%2)){ 32 a[i]=2,a[i+1]=2; 33 cnt++; 34 continue; 35 } 36 cnt+=2; 37 a[i]=2,a[i+1]=2; 38 } 39 if((a[n-2]%2==0)&&(a[n-1]%2)) 40 cnt+=2; 41 cout<<"YES"<<endl; 42 cout<<cnt<<endl; 43 } 44 }
Codeforces Round #410 (Div. 2)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。