Codeforces Round #614 题解

Posted ctyakwf

tags:

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

A题

关注到本题的数据量不大但是数据很大,可以使用暴力+哈希的方法

将关闭的餐厅放到map遍历

技术图片
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<map>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=4e5+10;
const int inf=0x3f3f3f3f;
map<ll,int> m1; 
int main(){
    int t;
    cin>>t;
    while(t--){
      int n;
      m1.clear();
      int k;
      int i;
      int s;
      int x;
      cin>>n>>s>>k;
      for(i=1;i<=k;i++){
          cin>>x;
          m1[x]=1;
      }
      int sum=0;
      for(i=s;i<=n;i++){
          if(m1[i]){
              sum++;
          }
        else
        break;
      }
      if(i==n+1)
      sum=inf;
      int res=0;
      for(i=s;i>=1;i--){
          if(m1[i]){
              res++;
          }
        else
        break;
      }
      if(i==0)
      res=inf;
     cout<<min(res,sum)<<endl; 
    } 
} 
View Code

B题

学习到了一点,当我们能推出公式但是做不出答案的时候,但是有很多人过,就可以合理猜测答案后证明,一般都是猜测一半或者1,本题答案正是每次1个

技术图片
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<map>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=4e5+10;
const int inf=0x3f3f3f3f;
const double eps=0.004;
int main(){
    int n;
    double sum=0;
    cin>>n;
    for(int i=1;i<=n;i++)
    sum+=1.0/i;
    cout<<sum<<endl;
} 
View Code

C题

这题数据量很大,但是很好看出解答方法,因为只有两排,只要根据情况判断左右,左上右上左下右下几个位置,我进行了暴力枚举发现超时。

所以我的想法是如何能保留住之前情况下不合法的所有状态,并对每次q进行更新。

所以我们可以用一个cnt来表述非法状态,然后枚举当前位置的几个隔壁方位,对总量进行修改。

技术图片
#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<map>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N=4e5+10;
const int inf=0x3f3f3f3f;
int g[3][N];
int main(){
    int n,q;
    cin>>n>>q;
    int cnt=0;
    while(q--){
        int x,y;
        cin>>x>>y;
        int z=1;
        if(x==1)
        z=2;
        if(g[x][y]){
            cnt=cnt-g[z][y]-g[z][y-1]-g[z][y+1];
        }
        else
           cnt=cnt+g[z][y]+g[z][y-1]+g[z][y+1];
        if(cnt)
        cout<<"No"<<endl;
        else
        cout<<"Yes"<<endl;
        g[x][y]^=1;
    }
} 
View Code

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

Codeforces Round #614 (Div. 2)

Codeforces Round #614 (Div. 2) 比赛总结

Codeforces Round #614 (Div. 2)

Codeforces Round #614 (Div. 2)

Codeforces Round #614 (Div. 2)

Codeforces Round #614 选讲