# csu 1550: Simple String （字符串）

## 1550: Simple String

Time Limit: 1 Sec  Memory Limit: 256 MB
Submit: 249  Solved: 112
[Submit][Status][Web Board]

## Description

Welcome,this is the 2015 3th Multiple Universities Programming Contest ,Changsha ,Hunan Province. In order to let you feel fun, ACgege will give you a simple problem. But is that true? OK, let’s enjoy it.
There are three strings A , B and C. The length of the string A is 2*N, and the length of the string B and C is same to A. You can take N characters from A and take N characters from B. Can you set them to C ?

## Input

There are several test cases.
Each test case contains three lines A,B,C. They only contain upper case letter.
0<N<100000
The input will finish with the end of file.

## Output

For each the case, if you can get C, please print “YES”. If you cann’t get C, please print “NO”.

## Sample Input

AABB
BBCC
AACC
AAAA
BBBB
AAAA

## Sample Output

YES
NO

## HINT

 A[I]N B[I]N C[I]<=A+N C[I]<=A+N C[I]<=N+N

#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
int A[26], B[26], C[26];
bool flag[26];
char str[200002];
int main()
{
int i, lenth;
while (cin >> str)
{
memset(A, 0, sizeof(A));
memset(B, 0, sizeof(B));
memset(C, 0, sizeof(C));

lenth = strlen(str);
for (i=0; i<lenth; i++)
{
A[str[i]-'A']++;//统计A字符串中某个字母的个数
}

cin >> str;
for (i=0; i<lenth; i++)
{
B[str[i]-'A']++;//统计B字符串中字母的个数
}

cin >> str;
for (i=0; i<lenth; i++)
{
C[str[i]-'A']++;
}

memset(flag, true, sizeof(flag));
for (i=0; i<26; i++)
{
if (A[i] > lenth/2)
{
A[i] = lenth/2; //当A中某个字母>N中，最多也只能提供N个，赋值为N
}
if (B[i] > lenth/2)
{
B[i] = lenth/2;
}

if (C[i] <= A[i] + B[i])//当c字符串满足是，标记为false
{
flag[i] = false;
}

}
for (i=0; i<26; i++)
{
if (flag[i] == true)//c字符串中有一个不满足，跳出循环
{
break;
}
}
if (i<26)
{
cout << "NO" << endl;
}
else
{
cout << "YES" << endl;
}
}
return 0;
}

• 广告
• 抄袭
• 版权
• 政治
• 色情
• 无意义
• 其他

120