CSU - 1550 Simple String —— 字符串
题目链接:http://acm.csu.edu.cn/csuoj/problemset/problem?pid=1550
题解:
1.A+B 与C的交集必须>=n
2.A与C的交集必须>=n/2,B与C的交集必须>=n/2。
代码如下:
1 #include <iostream> 2 #include<algorithm> 3 #include<cstdio> 4 #include<cstring> 5 #include<algorithm> 6 using namespace std; 7 #define ms(a, b) memset((a), (b), sizeof(a)) 8 typedef long long ll; 9 const ll mod=1e9+7; 10 11 char a[100010], b[100010], c[100010]; 12 int s1[30],s2[30],s3[30],ss[30]; 13 14 void solve() 15 { 16 while(scanf("%s",a)!=EOF) 17 { 18 scanf("%s%s",b,c); 19 int n = strlen(a); 20 21 ms(s1,0); ms(s2,0); ms(s3,0), ms(ss,0); 22 int m1 = 0, m2 = 0, m3 = 0; 23 for(int i = 0; i<n; i++) 24 { 25 s1[a[i]-65]++; ss[a[i]-65]++; 26 s2[b[i]-65]++; ss[b[i]-65]++; 27 s3[c[i]-65]++; 28 } 29 30 for(int i = 0; i<26; i++) 31 { 32 m1 += min(s1[i],s3[i]); 33 m2 += min(s2[i],s3[i]); 34 m3 += min(ss[i],s3[i]); 35 } 36 37 if(m3<n || m1*2<n || m2*2<n) 38 puts("NO"); 39 else 40 puts("YES"); 41 //cout<<m1<<' '<<m2<<' '<<m3<<endl; 42 } 43 } 44 45 int main() 46 { 47 solve(); 48 return 0; 49 }