agc016B - Colorful Hats(智商题)
时间:2018-09-20
本文章向大家介绍agc016B - Colorful Hats(智商题),需要的朋友可以参考一下
题意
有$n$个人,每个人有一种颜色,第$i$个人说除了我之外有$a_i$种不同的颜色,问是否存在一组合法解
Sol
700分的题就这么神仙了么。。好难啊。。。
先说结论吧
设$mx, mn$分别为最大 / 最小值,显然$mx - mn > 1$的时候无解
接下来分两种情况讨论
$mx = mn$:这时候每一种颜色要么是互不相同,要么是至少出现两次
$mx = mn +1$:这时候小的元素一定是独一无二的,大的元素至少出现两次。
以上结论都可以用反证法证明。
总结:
虽然结论证起来不难,但是自己想的话确实是太难受了,因为会有很多干扰你的模型(我最开始的时候还想tarjan缩点来着qwq)。
自己推了一个多小时也刚刚推除了无解的情况和$mx = mn$的情况,推到最后直接心态爆炸,我甚至都感觉自己的思路有问题,
因为每个结论要证明都不是很显然,总是感觉自己想复杂了。不过这题确实是好题
#include<bits/stdc++.h> using namespace std; const int MAXN = 1e6 + 10, INF = 1e9 + 10; inline int read() { char c = getchar(); int x = 0, f = 1; while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar();} while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar(); return x * f; } int N, a[MAXN]; main() { N = read(); for(int i = 1; i <= N; i++) a[i] = read(); sort(a + 1, a + N + 1); int mn = 0, mx = 0, num; a[0] = -1; for(int i = 1; i <= N; i++) if(a[i] != a[i - 1]) { if(!mn) mn = a[i]; else if(!mx) mx = a[i], num = i - 1; else {puts("No"); return 0;} } if(!mx) { if((mn == N - 1) || (mn * 2 <= N)) puts("Yes"); else puts("No"); } else { if((mx == mn + 1) && (2 * (mx - num) <= N - num) && (mx - num > 0)) puts("Yes"); else puts("No"); } return 0; }
- [译]Asp.net MVC 之 Contorllers(一)
- Oracle 学习笔记
- [数据库基础]——索引详解
- [数据库基础]——快速浏览日期时间转换
- 【死磕Java并发】—- 深入分析CAS
- [SQLServer大对象]——FileTable从文件系统迁移文件
- [机器学习]-[数据预处理]-中心化 缩放 KNN(二)
- [数据清洗]-看上去一样的数字
- [数据清洗]- Pandas 清洗“脏”数据(三)
- [数据清洗]- Pandas 清洗“脏”数据(二)
- [数据清洗]-Pandas 清洗“脏”数据(一)
- [数据清洗]-混乱的邮编数据
- 10行代码,Python实现爬取淘宝/天猫评论
- 4.请求安全-- 结合使用的安全优势总结
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 定位权限请求时易犯的错误小结
- NSOperationQueue队列中操作依赖相关思考
- 单细胞转录组高级分析一:多样本合并与批次校正
- 10元最多可喝多少瓶啤酒?(不可借酒+可借酒,swift语言实现)
- 单细胞转录组高级分析二:转录调控网络分析
- 关于数组内元素是否会被改变的思考
- 排序之选择排序实现(swift)
- 去除友盟等第三方SDK失败的解决办法(clang: error: no such file or directory:xx)
- iOS踩坑之多代理模式使用注意
- 单细胞转录组高级分析三:细胞通讯分析
- 单细胞转录组高级分析四:scRNA数据推断CNV
- 0808-7.1.1-如何在CDP7.1.1指定Hive SQL的资源池队列
- iOS多线程之GCD、OperationQueue 对比和实践记录
- singleR的7个数据库文件下载失败的解决方案
- Spring Boot 如何快速集成 Redis 哨兵?