headache..TAT 熬夜伤身啊
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int maxn=10000000+100;
char a[maxn],b[maxn],c[maxn];
int cnta[30],cntb[30],cntc[30];
int main()
{
// 把ABC看作特殊的集合(元素可以重复)
// C含于A交B,A交C元素个数大于等于N,B交C元素个数大于等于N
while(~scanf("%s%s%s",a,b,c))
{
memset(cnta,0,sizeof(cnta));
memset(cntb,0,sizeof(cntb));
memset(cntc,0,sizeof(cntc));
int lena=strlen(a);
int lenb=strlen(b);
int lenc=strlen(c);
int flag=0;
for(int i=0;i<lena;i++)
cnta[a[i]-'A'+1]++;
for(int i=0;i<lenb;i++)
cntb[b[i]-'A'+1]++;
for(int i=0;i<lenc;i++)
cntc[c[i]-'A'+1]++;
int sa=0,sb=0;
for(int i=1;i<=26;i++)
{
if(cnta[i]+cntb[i]<cntc[i]) { printf("NO\n"); flag=1; break;}
sa+=min(cnta[i],cntc[i]);
sb+=min(cntb[i],cntc[i]);
}
if(flag) continue;
if((sa>=lenc/2)&&(sb>=lenc/2)) printf("YES\n");
else printf("NO\n");
}
return 0;
}