A. ABC String
Example
input
4
AABBAC
CACA
BBBBAC
ABCA
output
YES
YES
NO
NO
CODE:
#include <string>
#include<algorithm>
#include <iostream>
#include <map>
using namespace std;
typedef long long ll;
int main()
{
int t;
cin>>t;
map <char, int> ss;//记录每个字母的总数量
map <char, int> cc;//记录每个字母的实时数量
while(t--){
string s;
cin>>s;
int n=s.size(), tem='A'+'B'+'C';
bool ok=1;
char f=s[0], l=s[n-1];
char m=tem-f-l;
if( f==l ) { cout<<"NO"<<endl; continue; }
ss['A']=0; ss['B']=0; ss['C']=0;
cc['A']=0; cc['B']=0; cc['C']=0;
for(int i=0; i<n; i++) {
ss[s[i]]++;
}
if( ss[f]+ss[m]==ss[l] ){
for(int i=0; i<n; i++) {
cc[s[i]]++;
if( cc[f]+cc[m]<cc[l] ) { ok=0; break; }
}
}
else if( ss[f]==ss[m]+ss[l] ){
for(int i=0; i<n; i++) {
cc[s[i]]++;
if( cc[f]<cc[m]+cc[l] ) { ok=0; break; }
}
}
else ok=0;
if(ok) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}
B. Berland Crossword
Example
input
4
5 2 5 3 1
3 0 0 0 0
4 4 1 4 0
2 1 1 1 1
output
YES
YES
NO
YES
题解:
关键以及难点是在把复杂的条件判断转换成简单的数学逻辑关系。
code:
#include <string>
#include <string.h>
#include<algorithm>
#include <iostream>
using namespace std;
typedef long long ll;
int main()
{
int t;cin >> t;
while (t--)
{
int n, u, r, d, l;
cin>>n>>u>>r>>d>>l;
int q=0, f=0;
bool ok=1;
if( r==n ) q++;
if( l==n ) q++;
if( r==n-1 ) f++;
if( l==n-1 ) f++;
if( u<q || d<q ) ok = 0;
if( u+d < f+2*q ) ok = 0;
q=0, f=0;
if( u==n ) q++;
if( d==n ) q++;
if( u==n-1 ) f++;
if( d==n-1 ) f++;
if( r<q || l<q ) ok = 0;
if( r+l < f+2*q ) ok = 0;
if(ok) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
}
return 0;
}