CodeForces - 1384

CodeForces - 1384

A - Common Prefixes GNU

前缀取相同,后面的不同的字母向后移一位

char ans[maxn][60];
int t,n,a[maxn];
int main()
{
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        rep(i,1,n)scanf("%d",&a[i]);
        rep(i,1,50)ans[1][i]='a';
        rep(i,2,n+1)
        {
            rep(j,1,a[i-1])ans[i][j]=ans[i-1][j];
            rep(j,a[i-1]+1,50)ans[i][j]=(ans[i-1][a[i-1]+1]-'a'+1)%26+'a';
        }
        rep(i,1,n+1)
        {
            rep(j,1,50)printf("%c",ans[i][j]);
            puts("");
        }
    }
    return 0;
}



B2 - Koa and the Beach (Hard Version)

h表示当前的高度,f表示h下一步将要-1还是+1

int n,t,a[maxn],k,l,h,f;
bool solve()
{
    int h=k+1,f=-1;
    rep(i,1,n)
    {
        if (a[i]<0)return false;//怎么样都会淹死
        else if (a[i]>=k)//怎么样都不会被淹死,取最优状态,即下降的那半段的开头
        {
            h=k+1;
            f=-1;
        }
        else if (f==-1)h=min(h-1,a[i]);//模拟下降的那半段
        else//模拟上升的那半段
        {
            h++;
            if (h>a[i])return false;
        }//下降的那半段到头了就切换为上升
        if (h==0)f=1;
    }
    return true;
}
int main()
{
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d%d%d",&n,&k,&l);
        rep(i,1,n)scanf("%d",&a[i]),a[i]=l-a[i];
        if (solve())printf("YES\n");
        else printf("NO\n");
    }
    return 0;
}



C - String Transformation 1

直接模拟
S[x-'a'].insert(y-'a')表示x需要转化为y

abb
bcd
a要变成b,b要变成c,b要变成d

对a进行操作后:
bbb
bcd
b要变成c,b要变为d

对b进行第一次操作后:
bcc
bcd
变为:c要变为d

对b进行第二次操作后:
bcd
bcd


char s1[maxn],s2[maxn];
int t,n;
set<int> S[30];
int main()
{
    scanf("%d",&t);
    while(t--)
    {
        rep(i,0,28)S[i].clear();
        bool mark=true;
        int ans=0;
        scanf("%d",&n);
        scanf("%s",s1);
        scanf("%s",s2);
        rep(i,0,n-1)
        {
            if (s1[i]==s2[i])continue;
            else if (s1[i]>s2[i])mark=false;
            else if (S[s1[i]-'a'].find(s2[i]-'a')==S[s1[i]-'a'].end())S[s1[i]-'a'].insert(s2[i]-'a');
        }
        rep(i,0,25)
        {
            if (S[i].size()==0)continue;
            set<int>:: iterator it;
            ans++;
            int x=*S[i].begin();
            for (it=S[i].begin();it!=S[i].end();it++)
            {
                if (it==S[i].begin())continue;
                if (S[x].find(*it)==S[x].end())S[x].insert(*it);
            }
        }
        if (!mark)W(-1);
        else W(ans);
    }
    return 0;
}



D - GameGame

摘自:https://blog.csdn.net/C_Dreamy/article/details/107576085?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159724017219724848303834%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=159724017219724848303834&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v3~pc_rank_v2-2-107576085.first_rank_ecpm_v3_pc_rank_v2&utm_term=++Codeforces+Round+%23659+%28Div.+&spm=1018.2118.3001.4187
根据异或的性质,统计所有位上的数字

a 表示当前位上 1 的个数,b 表示当前位上 0 的个数

如果 a 是偶数,无论 b ,这一位上都相同

如果 a 是奇数,

Koa 先拿,现在有 a-11,为偶数,很容易想到剩余的 1 该如何分

若 均分后每个人再分偶数个 即 (a-1)%4=0,也就是说每个人再分到偶数个 1,那么无论 b, Koa 赢
若 均分后每个人再分奇数个 即 (a-1)%4=2,那么决定权再对手手里,即通过拿 0 使得 Koa 再拿奇数个 1
如果 0 有偶数个,那么 Koa 一定会拿到奇数个 1,一定输
如果 0 有奇数个,那么 Koa 通过多拿一个 0 少拿一个 1,使得对手多拿一个 1 ,从而获得胜利

int num1[maxn],num0[maxn],t,n,x;
int main()
{
    scanf("%d",&t);
    while(t--)
    {
        int ans=0;
        mem(num1,0);
        scanf("%d",&n);
        rep(i,1,n)
        {
            scanf("%d",&x);
            repp(j,0,30)if (x&(1<<j))num1[j]++;
        }
        for (int i=29;i>=0;i--)
        {
            num0[i]=n-num1[i];
            if (num1[i]%2==1)
            {
                if (num1[i]%4==1)ans=1;
                else if (num1[i]%4==3&&num0[i]%2==0)ans=2;
                else if (num1[i]%4==3&&num1[i]%2==1)ans=1;
                break;
            }
        }
        if (ans==1)printf("WIN\n");
        else if (ans==2)printf("LOSE\n");
        else printf("DRAW\n");
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值