博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AGC 016B.Colorful Hats(思路)
阅读量:5324 次
发布时间:2019-06-14

本文共 1294 字,大约阅读时间需要 4 分钟。

对于某个元素分类讨论一下,就可以知道n个元素的总颜色种数了。

比如对a[1]分类讨论:

若1的颜色和某个元素相同,则总颜色数为a[1]。a[i]要么等于a[1](i与某个元素颜色相同,记个数为A),要么等于a[1]+1(i的颜色唯一,记个数为B)。

要满足:B不等于n-1(得有个i和1颜色相同);最多颜色数=(A+1)/2+B要大于等于a[1];同时还有上界限制!即最少颜色数=1+B要小于等于a[1]。

若1的颜色是唯一的,则总颜色数为a[1]+1。a[i]要么等于a[1](i的颜色唯一,记个数为A),要么等于a[1]+1(与某个元素颜色相同,记个数为B)。

要满足:B不能为1(可以大于1也可以为0);最多颜色数=1+A+B/2要大于等于a[1]+1;同时也有上界限制!即最少颜色数=1+A+(B!=0)要小于等于a[1]+1。

当然这个分类讨论实际和别人写的求最大最小值有多少个一样(只会执行一种check)。我才不说是我写麻烦了。其实也差不多。

//2ms   896KB#include 
#include
#include
//#define gc() getchar()#define MAXIN 300000#define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++)typedef long long LL;const int N=1e6+5;int a[N];char IN[MAXIN],*SS=IN,*TT=IN;inline int read(){ int now=0;register char c=gc(); for(;!isdigit(c);c=gc()); for(;isdigit(c);now=now*10+c-'0',c=gc()); return now;}bool Check1(const int n){ int A=0,B=0; for(int i=2,a1=a[1]; i<=n; ++i) if(a[i]==a1) ++A; else if(a[i]==a1-1) ++B; else return 0; return B
>1)+B>=a[1]&&B
>1)>=a[1]&&A+(B!=0)<=a[1];}int main(){ int n=read(); for(int i=1; i<=n; ++i) a[i]=read(); puts(Check1(n)||Check2(n)?"Yes":"No"); return 0;}

转载于:https://www.cnblogs.com/SovietPower/p/9817449.html

你可能感兴趣的文章
php 配置正确的时间
查看>>
基于Python对象引用、可变性和垃圾回收详解
查看>>
大数据如何影响百姓生活
查看>>
linux性能测试脚本
查看>>
基于Python的轻量级RPC的实现
查看>>
导入项目后下载jar包问题理解
查看>>
PKUWC 2019 记
查看>>
代理设计模式简单格式(备忘)
查看>>
标记Activex控件为安全脚本
查看>>
错误调试记录1
查看>>
队列实例程序(C语言)
查看>>
一、内存
查看>>
[转]基础知识整理
查看>>
团队作业4——第一次项目冲刺(Alpha版本)5th day
查看>>
Luogu 3810 三维偏序
查看>>
Python中操作SQLAlchemy
查看>>
获取JUnit的执行结果
查看>>
Ubuntu安装MediaInfo
查看>>
redis总结
查看>>
Myeclipse的快捷键大全
查看>>