链接:

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 思维+数学相关推荐

  1. 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 ...

  2. Codeforces Round #590 (Div. 3) E. Special Permutations 差分 + 思维

    传送门 文章目录 题意: 思路: 题意: 思路: 直接考虑比较难想,这种公式题基本都是将部分答案看成一个整体,考虑xi,xi+1x_i,x_{i+1}xi​,xi+1​的贡献的. 假设当前的xi=x, ...

  3. Codeforces Round #726 (Div. 2) F. Figure Fixing 二分图 + 思维

    传送门 文章目录 题意: 思路 题意: 给你一张nnn个点mmm条边的图,每个点都有一个当前值aia_iai​,目标值bib_ibi​,每次可以选择一条边(i,j)(i,j)(i,j),将ai,aja ...

  4. 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)的子 ...

  5. Codeforces Round #636 (Div. 3) D. Constant Palindrome Sum 思维 + 差分

    传送门 文章目录 题意: 思路: 题意: 思路: 首先有一个显然的性质就是每组操作最多不会超过两次. 很容易想到一个很暴力的思路,就是枚举x∈[1,2∗k]x \in [1,2*k]x∈[1,2∗k] ...

  6. Codeforces Round #631 (Div. 2) D. Dreamoon Likes Sequences 思维 + 组合数学

    传送门 文章目录 题意: 思路: 题意: 给你d,modd,modd,mod,让你求能构造出如下序列aaa的个数模modmodmod: 思路: 首先可以发现aaa的长度不能超过log2dlog_2dl ...

  7. Codeforces Round #620 (Div. 2) E. 1-Trees and Queries 思维 + LCA

    传送门 文章目录 题意 思路: 题意 思路: 照例,先考虑不加边怎么做.由于可以经过重复的边或点,设aaa与bbb之间长度为lenlenlen,那么需要len<=klen<=klen< ...

  8. 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 ...

  9. 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 ...

最新文章

  1. robot framework安装问题排查
  2. C#下调用WMI查询系统信息
  3. 快速了解FAT32文件系统
  4. tomcat架构分析(概览)【转】
  5. shell脚本实现无密码交互的SSH自动登陆
  6. Lucene6去掉了Filter但是可以用BooleanQuery实现Filter查询
  7. element UI 制作模糊搜索框
  8. @autowired注解注入为null_Intellij IDEA中Mybatis Mapper自动注入警告的6种解决方案
  9. Java输出特定时间段特定格式时间信息
  10. 关于GCD执行任务的理解
  11. HTML和CSS是什么玩意儿
  12. vue 中获取select 的option的value 直接click?
  13. STM32学习记录0004——ISP串口下载
  14. 心不动——王阳明最可怕之处
  15. 《动手学深度学习》报错 解决方案RuntimeError: DataLoader worker (pid(s) ...) exited unexpectedly
  16. WUSTOJ 1923 一笔画 【回溯】
  17. ppt模板如何制作个性海报?
  18. 去掉最低工资和最高工资后的工资平均值(Java实现2种算法)
  19. Spring/SpringBoot学习中遇到的问题记录(2):java.lang.ClassNotFoundException:org.apache.jsp.WEB_002dINF.views.xx
  20. python实现在线翻译

热门文章

  1. android 图片存sd卡上,android打开,保存图片到sd卡,显示图片
  2. java怎么更改id名_java - 尽管ID已更改为_id,但列'_id'不存在
  3. GC的作用域,方法区和堆
  4. idea生成方法注释的正确方法
  5. mysql试题错误记录字段_MySQL这三道常见的面试题,你有被问过吗?
  6. matlab 图像的色彩强度,图像色彩增强的问题,,,小白给跪,
  7. MySQL数据库常见的几个问题
  8. 今日腊八节,祝福送上!
  9. linux下搭建vsftp锁定根目录,Linux服务搭建之vsftp
  10. linux安装mysql8依赖的环境_CentOS Linux release 8 安装mysql8.