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
思路
水题一道,直接(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
思路
这个题细节有一点点多
预处理出来(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