Codeforces Round #410 (Div. 2) D. Mike and distribution 思维+数学
链接:
http://codeforces.com/contest/798/problem/D
题意:
给你两个长度为n的数列a和b,让你选n/2+1个下标,使得2*∑ai>suma,2*∑bi>sumb
题解1:
用一个叫random_shuffle的东西,每次都乱选,然后暴力前n/2+1个。
这种做法真的是毫无人性啊。以后不会的就这么办吧
代码:
31 ll a[MAXN], b[MAXN], c[MAXN]; 32 33 int main() { 34 ios::sync_with_stdio(false); 35 int n; 36 cin >> n; 37 rep(i, 0, n) c[i] = i; 38 ll suma = 0, sumb = 0; 39 rep(i, 0, n) cin >> a[i], suma += a[i]; 40 rep(i, 0, n) cin >> b[i], sumb += b[i]; 41 while (1) { 42 random_shuffle(c, c + n); 43 ll A = 0, B = 0; 44 rep(i, 0, n / 2 + 1) A += a[c[i]], B += b[c[i]]; 45 if (2 * A > suma && 2 * B > sumb) break; 46 } 47 cout << n / 2 + 1 << endl; 48 rep(i, 0, n / 2 + 1) cout << c[i] + 1 << ' '; 49 return 0; 50 }
题解2:
首先注意到,选出n / 2 + 1个数,2倍的和大于总和,等价于选出n / 2 + 1个数,总和大于剩下的数。
因为可以取n / 2 + 1个,那么先对A排序,B不动,先把A[1]选了(这个是用在证明A数组成立用的),A【1】是当前A中最大的了。当然了也选了一个B,就是选了B[A[1].id],
然后每两个做一pair,选一个比较大的B,也就是max(B[A[i].id], B[A[i + 1].id])
这样,B数组是满足的,这很容易证明,因为没一对中,都选了一个较大的。然后加上第一个,总和肯定大于剩下 的。
也就是
max(b[1], b[2]) >= min(b[1], b[2])
max(b[3], b[4]) >= min(b[3], b[4])
max(b[5], b[6]) >= min(b[5], b[6])
那么全部相加,不等号方向不变。而且开头还有一个b[A[1].id]加了进来,所以是严格大于的。
再来看看A的证明。
第一是选了a[1]
然后选a[2]和a[3]的那个呢?不固定的,还要看B,但是不管,有以下不等式。
a[1] >= any(a[2], a[3])
any(a[2], a[3]) >= any(a[4], a[5])
any(a[4], a[5]) >= any(a[5], a[6])
也就是,你选了一个a[1],然后a[2]和a[3]选那个是没关系的,可以用a[1]和它比较,然后又因为选了any(a[2], a[3]),那么你a[4]和a[5]选那个是没所谓的,因为可以用any(a[2], a[3])和它比较。
最后,any(a[n - 1], a[n]) > 0,所以是严格大于的。
代码:
31 struct Node { 32 int id, a, b; 33 bool operator <(const Node &t) const { 34 return a > t.a; 35 } 36 }p[MAXN]; 37 38 int main() { 39 ios::sync_with_stdio(false); 40 int n; 41 cin >> n; 42 VI ans; 43 rep(i, 0, n) p[i].id = i; 44 rep(i, 0, n) cin >> p[i].a; 45 rep(i, 0, n) cin >> p[i].b; 46 sort(p, p + n); 47 ans.pb(p[0].id); 48 for (int i = 1; i < n; i += 2) { 49 int t = p[i].id; 50 if (p[i].b < p[i + 1].b) t = p[i + 1].id; 51 ans.pb(t); 52 } 53 cout << ans.size() << endl; 54 rep(i, 0, ans.size()) cout << ans[i] + 1 << ' '; 55 return 0; 56 }
转载于:https://www.cnblogs.com/baocong/p/6783227.html
Codeforces Round #410 (Div. 2) D. Mike and distribution 思维+数学相关推荐
- Codeforces Round #410 (Div. 2) D. Mike and distribution(贪心)
Mike has always been thinking about the harshness of social inequality. He's so obsessed with it tha ...
- Codeforces Round #590 (Div. 3) E. Special Permutations 差分 + 思维
传送门 文章目录 题意: 思路: 题意: 思路: 直接考虑比较难想,这种公式题基本都是将部分答案看成一个整体,考虑xi,xi+1x_i,x_{i+1}xi,xi+1的贡献的. 假设当前的xi=x, ...
- Codeforces Round #726 (Div. 2) F. Figure Fixing 二分图 + 思维
传送门 文章目录 题意: 思路 题意: 给你一张nnn个点mmm条边的图,每个点都有一个当前值aia_iai,目标值bib_ibi,每次可以选择一条边(i,j)(i,j)(i,j),将ai,aja ...
- Codeforces Round #598 (Div. 3) F. Equalizing Two Strings 思维 + 逆序对
传送门 文章目录 题意: 思路: 题意: 给你两个长度为nnn的串a,ba,ba,b,每次可以同时翻转a,ba,ba,b中任意一段长度为L(1≤L≤n)L(1\le L\le n)L(1≤L≤n)的子 ...
- Codeforces Round #636 (Div. 3) D. Constant Palindrome Sum 思维 + 差分
传送门 文章目录 题意: 思路: 题意: 思路: 首先有一个显然的性质就是每组操作最多不会超过两次. 很容易想到一个很暴力的思路,就是枚举x∈[1,2∗k]x \in [1,2*k]x∈[1,2∗k] ...
- Codeforces Round #631 (Div. 2) D. Dreamoon Likes Sequences 思维 + 组合数学
传送门 文章目录 题意: 思路: 题意: 给你d,modd,modd,mod,让你求能构造出如下序列aaa的个数模modmodmod: 思路: 首先可以发现aaa的长度不能超过log2dlog_2dl ...
- Codeforces Round #620 (Div. 2) E. 1-Trees and Queries 思维 + LCA
传送门 文章目录 题意 思路: 题意 思路: 照例,先考虑不加边怎么做.由于可以经过重复的边或点,设aaa与bbb之间长度为lenlenlen,那么需要len<=klen<=klen< ...
- Codeforces Round #361 (Div. 2) B. Mike and Shortcuts bfs
B. Mike and Shortcuts 题目连接: http://www.codeforces.com/contest/689/problem/B Description Recently, Mi ...
- Codeforces Round #361 (Div. 2) E. Mike and Geometry Problem 【逆元求组合数 离散化】
任意门:http://codeforces.com/contest/689/problem/E E. Mike and Geometry Problem time limit per test 3 s ...
最新文章
- robot framework安装问题排查
- C#下调用WMI查询系统信息
- 快速了解FAT32文件系统
- tomcat架构分析(概览)【转】
- shell脚本实现无密码交互的SSH自动登陆
- Lucene6去掉了Filter但是可以用BooleanQuery实现Filter查询
- element UI 制作模糊搜索框
- @autowired注解注入为null_Intellij IDEA中Mybatis Mapper自动注入警告的6种解决方案
- Java输出特定时间段特定格式时间信息
- 关于GCD执行任务的理解
- HTML和CSS是什么玩意儿
- vue 中获取select 的option的value 直接click?
- STM32学习记录0004——ISP串口下载
- 心不动——王阳明最可怕之处
- 《动手学深度学习》报错 解决方案RuntimeError: DataLoader worker (pid(s) ...) exited unexpectedly
- WUSTOJ 1923 一笔画 【回溯】
- ppt模板如何制作个性海报?
- 去掉最低工资和最高工资后的工资平均值(Java实现2种算法)
- Spring/SpringBoot学习中遇到的问题记录(2):java.lang.ClassNotFoundException:org.apache.jsp.WEB_002dINF.views.xx
- python实现在线翻译
热门文章
- android 图片存sd卡上,android打开,保存图片到sd卡,显示图片
- java怎么更改id名_java - 尽管ID已更改为_id,但列'_id'不存在
- GC的作用域,方法区和堆
- idea生成方法注释的正确方法
- mysql试题错误记录字段_MySQL这三道常见的面试题,你有被问过吗?
- matlab 图像的色彩强度,图像色彩增强的问题,,,小白给跪,
- MySQL数据库常见的几个问题
- 今日腊八节,祝福送上!
- linux下搭建vsftp锁定根目录,Linux服务搭建之vsftp
- linux安装mysql8依赖的环境_CentOS Linux release 8 安装mysql8.