各种被卡细节,然后掉绿了QAQ
http://codeforces.com/contest/1194/problem/B
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define P pair<int,int>
#define in(x) int x;scanf("%d",&x);
#define inL(x) ll x;scanf("%I64d",&x);
#define scL(x) scanf("%I64d",&x);
#define sc(x) scanf("%d",&x);
#define input(A) for(int i=0;i<n;i++)scanf("%I64d",&A[i]);
char A[400005];
int n,m;
int B[50005];
int C[50005];
char T[50005];
/*bool check()
{
{
bool f=1,g=1;
for(int i=0; i<n; i++)
{
f=1;
for(int j=0; j<m; j++)
{
if(A[i*m+j]!='*')
{
f=0;
break;
}
}
if(f)break;
}
for(int j=0; j<m; j++)
{
g=1;
for(int i=0; i<n; i++)
{
if(A[i*m+j]!='*')
{
g=0;
break;
}
}
if(g)break;
}
return (f&&g);
}
}*/
int cal()
{
int t=0;
int ans=0;
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{
if(A[i*m+j]=='*')B[i]++;
}
t=max(t,B[i]);
}
int t1=0;
ans=m-t;
for(int i=0; i<n; i++)
{
if(t1==n)break;
if(B[i]==t)
{
for(int j=0; j<m; j++)
{
T[j]=A[i*m+j];
A[i*m+j]='*';
}
for(int j=0; j<m; j++)
{
C[j]=0;
for(int i=0; i<n; i++)
{
if(A[i*m+j]=='*')C[j]++;
}
t1=max(t1,C[j]);
}
for(int j=0; j<m; j++)
{
A[i*m+j]=T[j];
}
}
}
ans+=n-t1;
return ans;
}
int main()
{
in(q);
while(q--)
{
sc(n);
sc(m);
for(int i=0; i<n; i++)
{
getchar();
for(int j=0; j<m; j++)
{
A[i*m+j]=getchar();
//cout<<A[i*n+j];
}
//cout<<'\n';
}
{
for(int i=0; i<n; i++)B[i]=0;
for(int i=0; i<m; i++)C[i]=0;
cout<<cal()<<'\n';
}
}
}
http://codeforces.com/contest/1194/problem/C
#include<bits/stdc++.h>
using namespace std;
//int A[105];
int B[27];
int main()
{
int q;
scanf("%d",&q);
string s,t,p;
while(q--)
{
//memset(A,0,sizeof A);
memset(B,0,sizeof B);
cin>>s>>t>>p;
int x=s.length();
int y=t.length();
int j=0;
bool f=0;
for(int i=0; i<x; i++)
{
while(s[i]!=t[j])
{
j++;
//cout<<j<<endl;
if(j>=y)
{
// cout<<i<<j<<endl;
puts("NO");
f=1;
break;
}
}
if(f)break;
// A[j]=1;
j++;
}
if(f)continue;
for(int i=0; i<x; i++)
{
B[s[i]-'a']++;
}
x=p.length();
for(int i=0; i<x; i++)
{
B[p[i]-'a']++;
}
for(int i=0; i<y; i++)
{
if(B[t[i]-'a']<=0)
{
puts("NO");
f=1;
break;
}
B[t[i]-'a']--;
}
if(!f)puts("YES");
}
}