AcWing
  • 首页
  • 活动
  • 题库
  • 竞赛
  • 应用
  • 更多
    • 题解
    • 分享
    • 商店
    • 问答
    • 吐槽
  • App
  • 登录/注册

Codeforces Codeforces Round 858 (Div. 2). Problem B - Mex Master    原题链接    简单

作者: 作者的头像   seeingsomeone ,  2023-03-19 13:43:11 ,  所有人可见 ,  阅读 46


1


题目描述

 思维决定代码!!

我是真的想不到什么清晰的办法,然后我用的是分类讨论的思想:
经过一顿分析:结果就只能是3种:0,1,2

首先,把n==2的情况特殊处理掉,因为后面的讨论给漏掉了(第一发失败的原因)

序列中是否有0?

  1. 没有0:ans=0

  2. 有0:继续往下讨论

记0的数量为n, 大于0的数量为m,是否有 m>=n-1 ?

  1. 是: ans=0 (可以用大于0的数,去插空,使得mex()=0 )
  2. 否:继续下一轮判断

序列中是否有1?

  1. 没有1,ans=1 (无1,mex必须得是1)
  2. 有1,继续往下判断

是否有大于1的数?

  1. 有,ans=0 (用大于1的数跟0接近,使得 mex=1)
  2. 没有,ans=2

总结

真正实战的时候思路并没有这么清晰,很紧张,很乱的那种
这种是属于蛮办法,但是目前我只能想得到他

C++ 代码

#include<iostream>
using namespace std;

int main(){
 int t;
 cin>>t;
 while(t--){
    int k;
    cin>>k;
    bool y0=false,y1=false,y2=false;
    int n=0,m=0;
    for(int i=0; i<k; i++){
        int a;
        cin>>a;

        if(a==0) {n++; y0=true;}
        else{
             m++;
            if(a==1) y1=true;
            if(a>1) y2=true;
        }
    }

   if(y0){
     if(m>=n-1) puts("0");
     else{
         if(y1){
            if(y2)  puts("1");
            else   puts("2");
         }
        else puts("1");
     }
   }
   else  puts("0");
 }
  return 0;
}


0 评论

你确定删除吗?
1024
x

© 2018-2023 AcWing 版权所有  |  京ICP备17053197号-1
用户协议  |  隐私政策  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标
请输入绑定的邮箱地址
请输入注册信息