码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces Round #614 (Div. 2)

时间:2020-01-20 20:44:53      阅读:54      评论:0      收藏:0      [点我收藏+]

标签:ORC   second   math   getchar   getc   amp   一段   using   简单   

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\n",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)

标签:ORC   second   math   getchar   getc   amp   一段   using   简单   

原文地址:https://www.cnblogs.com/cjoierShiina-Mashiro/p/12219230.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!