Codeforces-Round#614 Div2

A题 ConneR and the A.R.C. Markland-N

题解:

在当前点左右对称的尝试走即可

int t;
    cin>>t;
    for(int i=1;i<=t;i++)
    {
        int n,s,k;cin>>n>>s>>k;
        set<int>seq;
        for(int j=1;j<=k;j++){
            int num;scanf("%d",&num);
            seq.insert(num);
        }
        bool find=false;int st=0;
        while(!find)
        {
            if(seq.find(min(n,s+st))==seq.end()||seq.find(max(1,s-st))==seq.end()){
                find=true;
                break;
            }
            st++;
        }
        cout<<st<<endl;
    }
    return 0;

B题 JOE is on TV!

题解:

看题意,盲猜调和级数

    int n;cin>>n;
    double res=0.0;

    for(int i=1;i<=n;i++)
    {
        res+=1.0/i;
    }
    printf("%.9lf\n",res);
    return 0;

C题 NEKO's Maze Game

题解:

使用映射的思想,每个点要挡住路径,需要与对面三个相邻的点匹配。使用\(cnt\)计数匹配的对数。因为匹配相当于无向边,只需计数一次即可。

#include<bits/stdc++.h>
#define MAXN 100010
using namespace std;
map<int,vector<int>>m;
int f[2][MAXN];
int main()
{
    memset(f,0,sizeof(f));
    int n,q;cin>>n>>q;
    int cnt=0;
    for(int i=1;i<=q;i++)
    {
        int a,b;scanf("%d%d",&a,&b);
        a--;
        if(f[a][b]){
            if(f[a^1][b])cnt--;
            if(f[a^1][b+1])cnt--;
            if(f[a^1][b-1])cnt--;
        }
        else{
            if(f[a^1][b])cnt++;
            if(f[a^1][b+1])cnt++;
            if(f[a^1][b-1])cnt++;
        }
        f[a][b]=!f[a][b];
        cnt==0?printf("Yes\n"):printf("No\n");
        
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/tldr/p/12222045.html