Codeforces Round #666 (Div. 2)


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;
 } 

 

上一篇:字符串的+操作


下一篇:迅雷for mac 666 最新破解版不限速Mac迅雷