NC26306. 暴走的字符串
描述
已知三个字符串S1,S2,S3。
长度分别为4,8,12
询问在你执行(0次或任意次)以下操作后,能否使S1=“AAAA”,S2=“BBBBBBBB”,S3=“CCCCCCCCCCCC”。
1、 将三个串同时把最后一个字符放在第一个字符前。
2、 Char a=S3[1]; S3[1]=S2[1]; S2[1]=S1[1]; S1[1]=a;
输入描述
多组数据
每组数据输入包括三行分别为S1,S2,S3
数据保证都是大写字母
数据组数不超过1000
输出描述
对于每组数据
返回“YES”或者“NO”
注意换行
示例1
输入:
ABCD ABCDABCD ABCDABCDABCD AAAA BBBBBBBB CCCCCCCCCCCC
输出:
NO YES
C++11(clang++ 3.9) 解法, 执行用时: 7ms, 内存消耗: 352K, 提交时间: 2019-06-12 15:53:56
#include<bits/stdc++.h> using namespace std; int main() { string a,b,c; while(cin>>a>>b>>c) { int flag =0; for(int i=0;i<4 && !flag;i++) { int book[500]; memset(book,0,sizeof book); book[(int)a[i]]++; book[(int)b[i]]++;book[(int)b[i+4]]++; book[(int)c[i]]++;book[(int)c[i+4]]++;book[(int)c[i+8]]++; if(book[(int)'A']!= 1 || book[(int)'B']!= 2 || book[(int)'C']!= 3) flag = 1; } if(!flag) cout<<"YES"<<endl; else cout<<"NO"<<endl; } return 0; }
C++14(g++5.4) 解法, 执行用时: 10ms, 内存消耗: 500K, 提交时间: 2020-01-23 14:16:09
#include<bits/stdc++.h> using namespace std; int a[300]; int main() { string s1,s2,s3; while(cin>>s1>>s2>>s3) { int flag=1; for(int i=0; i<4 && flag; i++) { memset(a,0,sizeof(a));//初始化 a[s1[i]]++; a[s2[i]]++; a[s2[i+4]]++; a[s3[i]]++; a[s3[i+4]]++; a[s3[i+8]]++; if(!(a['A']== 1 && a['B']== 2 && a['C']== 3))//NO { cout<<"NO"<<endl; flag=0; } } if(flag) cout<<"YES"<<endl; } return 0; }