A. Juggling Letters
题意
给定n组字符串,可以将字符串字符插入其他字符串中,问是否能使得n个字符串相同。
分析
只需要统计出每个字符出现的个数,如果每个字符是n的整数倍,则能够组成n个相同字符串。
代码
#include<cstdio> #include<algorithm> #include<iostream> #include<string> #include<cstring> using namespace std; int N=1e3+10; int flag[30]; int main() { int n; scanf("%d",&n); while(n--) { int m; scanf("%d",&m); memset(flag,0,sizeof(flag)); for(int i=0;i<m;i++) { string s; cin>>s; int l=s.length(); for(int j=0;j<l;j++) flag[s[j]-'a']++; } // for(int i=0;i<10;i++) printf("%d ",flag[i]); bool f=0; for(int i=0;i<27;i++) { if(flag[i]!=0&&flag[i]%m!=0) { f=1; break; } } if(!f) printf("YES\n"); else printf("NO\n"); } return 0; }
D. Stoned Game
题意
T与HT玩游戏,每方选非空堆石头中的一个拿出,且不能选择上一轮对方选择的石头堆,有一方无法选择石头堆时则失败。由T先开始选择
分析
可以举出几个简单的例子,容易发现,当石头中有一堆的数量大于其他堆石头数量之和时,T只需要开始时选择这个石头堆便能获胜;其次,若石头总数量为奇数,则T获胜。
代码
#include<cstdio> #include<algorithm> #include<iostream> #include<string> #include<cstring> using namespace std; const int N=110; int main() { int t; scanf("%d",&t); while(t--) { int n; int mx=0,sm=0; scanf("%d",&n); for(int i=0;i<n;i++) { int x; scanf("%d",&x); sm+=x; mx=max(mx,x); } if(mx>sm-mx) printf("T\n"); else printf("%s\n",sm%2 ? "T":"HL"); } return 0; }