Codeforces Educational Round 81 解题报告

Posted yspm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Educational Round 81 解题报告相关的知识,希望对你有一定的参考价值。

前置扯淡

赛前:这场(Div2)呀,那我写(3)题就行,(D)题尽力就好

赛中:啊啊,(ABC)我全过了(pretest),我太强了!!这把上蓝稳了

赛后:(woc),为啥被(hack)了两道!!(newbie) (yspm)认证成功了……

题目&&解答

A.Display The Number

link

思路

水题一道,直接(1)(7)随便输出就行

CODE

#include<bits/stdc++.h>
using namespace std;
#define int long long
namespace yspm{
    inline int read()
    {
        int res=0,f=1; char k;
        while(!isdigit(k=getchar())) if(k=='-') f=-1;
        while(isdigit(k)) res=res*10+k-'0',k=getchar();
        return res*f;
    }
    inline void work()
    {
        int x=read(); if(x%2==0) while(x) cout<<1,x-=2;
        else{cout<<7; x-=3; while(x) cout<<1,x-=2;}
        return cout<<endl,void();
    }
    signed main()
    {
        int T=read(); while(T--) work();
        return 0;
    }
}
signed main(){return yspm::main(); } 

B.Infinite Prefixes

link

思路

这个题细节有一点点多

预处理出来(s)串中每一个前缀的(0)(1)的差值,记为(a[space ])

(a[s.length()])的值

(1^0) 如果为(0),就考虑正无穷的情况

如果有一个(a_i)的值与(x)相同,就直接为正无穷,否则为(0)

(2^0) 如果不为(0),就考虑同余

当前位置的(a[space])值和(x)是否关于(a[s.length()])同余即可

还要注意正负性

CODE

#include<bits/stdc++.h>
using namespace std;
#define int long long
namespace yspm{
    inline int read()
    {
        int res=0,f=1; char k;
        while(!isdigit(k=getchar())) if(k=='-') f=-1;
        while(isdigit(k)) res=res*10+k-'0',k=getchar();
        return res*f;
    }
    const int N=1e5+10;
    int a[N],n,x; string s;
    inline void work()
    {
        a[0]=0; n=read(); x=read(); cin>>s;
        for(int i=0;i<n;++i)
        {
            if(s[i]=='0') a[i+1]=a[i]+1;
            else a[i+1]=a[i]-1;
        }
        int p=a[n];
        if(!p)
        {
            for(int i=1;i<=n;++i)
            {
                if(a[i]==x) return puts("-1"),void();
            }puts("0");
        }
        else 
        {
            int ans=(x==0);
            for(int i=1;i<=n;++i)
            {
                if((x-a[i])*p>=0&&(x-a[i])%p==0) ++ans; 
            } printf("%lld
",ans);
        }
        return ;
     } 
    signed main()
    {
        int T=read(); while(T--) work();
        return 0;
    }
}
signed main(){return yspm::main(); } 

这个题当时没有想到怎么处理正负性,这个乘积与(0)的大小关系还是可以进行频繁利用的

以上是关于Codeforces Educational Round 81 解题报告的主要内容,如果未能解决你的问题,请参考以下文章

Educational Codeforces Round 7 A

Educational Codeforces Round 7

Educational Codeforces Round 90

Educational Codeforces Round 33

Codeforces Educational Codeforces Round 54 题解

Educational Codeforces Round 27