Codeforces Round #614 (Div. 2)

Posted cjoiershiina-mashiro

tags:

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

Rank1696。
Cytus II好评。
因为下晚自习了所以D没调出来身败名裂。

A

签到题。

#include<bits/stdc++.h>
using namespace std;
unordered_set<int>S;
int min(int a,int b){return a<b? a:b;}
int read(){int x=0,c=getchar();while(!isdigit(c))c=getchar();while(isdigit(c))x=x*10+c-48,c=getchar();return x;}
int main()
{
    for(int T=read();T;--T)
    {
    S.clear();
    int n=read(),s=read(),k=read();
    for(int i=1;i<=k;++i) S.insert(read());
    int up=1e9,dw=1e9;
    for(int p=s;p<=n;++p) if(!S.count(p)) {up=p-s;break;}
    for(int p=s;p;--p) if(!S.count(p)) {dw=s-p;break;}
    printf("%d
",min(up,dw));
    }
}

B

简单结论题

#include<bits/stdc++.h>
using namespace std;
using db=double;
int main()
{
    int n;cin>>n;db ans=0;
    for(int i=1;i<=n;++i) ans+=1.0/i;
    printf("%.10lf",ans);
}

C

模拟题。
记录有多少对满足纵坐标之差(=1)且横坐标之差的绝对值(le1)

#include<bits/stdc++.h>
using namespace std;
const int N=200007;
int a[2][N];
int read(){int x=0,c=getchar();while(!isdigit(c))c=getchar();while(isdigit(c))x=x*10+c-48,c=getchar();return x;}
int main()
{
    int n=read(),q=read();
    for(int i=1,r,c,sum=0;i<=q;++i)
    {
    r=read()-1,c=read();
    if(!a[r][c])
    {
        a[r][c]=1;
        if(a[!r][c])++sum;
        if(a[!r][c-1])++sum;
        if(a[!r][c+1])++sum;
    }
    else
    {
        a[r][c]=0;
        if(a[!r][c])--sum;
        if(a[!r][c-1])--sum;
        if(a[!r][c+1])--sum;
    }
    puts(sum?"No":"Yes");
    }
}

D

简单结论题。
显然先走到某个点,然后往某个方向走一段区间最优。
(因为爆long long了所有当场没过)

#include<bits/stdc++.h>
using namespace std;
using ll=long long;
vector<pair<ll,ll>>p;
ll labs(ll x){return x<0? -x:x;}
ll dis(ll x,ll y,ll X,ll Y){return labs(x-X)+labs(y-Y);}
int main()
{
    ll x0,y0,ax,ay,bx,by,xs,ys,t;
    cin>>x0>>y0>>ax>>ay>>bx>>by>>xs>>ys>>t;
    while(x0<=5e16&&y0<=5e16) p.emplace_back(x0,y0),x0=x0*ax+bx,y0=y0*ay+by;
    int ans=0;
    for(int i=0;i<(int)p.size();++i) for(int j=0;j<(int)p.size();++j) if(dis(xs,ys,p[i].first,p[i].second)+dis(p[i].first,p[i].second,p[j].first,p[j].second)<=t) ans=max(ans,abs(i-j)+1);
    cout<<ans;
}

以上是关于Codeforces Round #614 (Div. 2)的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #614 (Div. 2)

Codeforces Round #614 (Div. 2)

Codeforces Round #614 选讲

Codeforces Round #614 (Div. 2)

Codeforces Round #614 (Div. 2)

Codeforces Round #614 (Div. 2) A-E简要题解