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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/283715.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PerfView专题 (第三篇):如何寻找 C# 中的 VirtualAlloc 内存泄漏

一&#xff1a;背景 上一篇我们聊到了如何用 PerfView 去侦察 NTHeap 的内存泄漏&#xff0c;这种内存泄漏往往是用 C 的 malloc 或者 C 的 new 分配而不释放所造成的&#xff0c;这一篇我们来聊一下由 VirtualAlloc 方法造成的泄漏如何去甄别&#xff1f;了解 VirtualAlloc 的…

[APP]- 找回Xcode7的代码折叠功能

为什么80%的码农都做不了架构师&#xff1f;>>> 原 找回Xcode7的代码折叠功能 升级到Xcode7后&#xff0c;会发现代码折叠功能不见了&#xff0c;这是怎么回事&#xff1f; 其实这个功能还在的&#xff0c;只是苹果默认把这个功能禁掉了&#xff1a;在Xcode菜单里选…

有哪些值得推荐的.NET ORM框架?

前言&#xff1a; 最近有很多同学问我.NET方面有哪些好用的ORM框架&#xff0c;我觉得这方面的介绍网上应该会介绍的比较全面文章&#xff0c;于是我想搜一篇全面的介绍文章发给他们结果我发现网上说来说去基本上就是那几个&#xff0c;于是就有了这篇文章。 什么是ORM? ORM 是…

从S3中导入数据到Dynamodb

本节如果你已经从Dynamodb中导出过数据&#xff0c;而且导出的文件以及被存入S3。文件内部结构会在Verify Data Export File 中描写叙述。我们称之前导出数据的原始表为source table&#xff0c;数据将要被导入的表为destination table。你能够将S3中的导出文件导入到dynamodb的…

HTML5程序开发范例宝典 完整版 (韩旭等著) 中文pdf扫描版

HTML5程序开发范例宝典紧密围绕编程者在编程中遇到的实际问题和开发中应该掌握的技术&#xff0c;全面介绍了利用HTML进行程序开发的各方面技术和技巧。全书共16章&#xff0c;内容包括HTML网页布局、HTML基本元素、HTML高级元素、表单的使用、列表的使用、超链接、表格应用、图…

ASP.NET Core 6框架揭秘实例演示[11]:诊断跟踪的几种基本编程方式

在整个软件开发维护生命周期内&#xff0c;最难的不是如何将软件系统开发出来&#xff0c;而是在系统上线之后及时解决遇到的问题。一个好的程序员能够在系统出现问题之后马上定位错误的根源并找到正确的解决方案&#xff0c;一个更好的程序员能够根据当前的运行状态预知未来可…

Autofac详解

Autofac详解 零、文章目录 一、Autofac详解 1、概述 Autofac是第三方IOC容器&#xff0c;是当前最流行的IOC容器。功能强大&#xff0c;比asp.netcore内置容器强大得多&#xff0c;支持属性注入和方法注入&#xff0c;支持AOP。官网地址&#xff1a;http://autofac.org/源码下载…

与ObjectDataSource共舞

4&#xff0c;ORM组件XCode&#xff08;与ObjectDataSource共舞&#xff09; XCode为了能更方便的解决大部分问题&#xff0c;不得不“屈身”于ObjectDataSource。 先上一个经典例子&#xff08;ObjectDataSourceGridView&#xff09;&#xff08;ObjectDataSource&#xff0…

ASP.NET Core 3.1中使用JWT身份认证

文章目录 0、引言1、关于Authentication与Authorization2、整个认证流程是怎样的&#xff1f;3、开始JWT身份认证 3.1 安装JwtBearer包3.2 安装Swashbuckle.AspNetCore包3.3 添加身份认证相关服务到容器中3.4 添加Swagger服务到容器中3.5 将身份认证加入到管道中3.6 将swagger加…

简单泛型

一般的类和方法&#xff0c;只能使用具体的类型&#xff1a;要么是基本类型&#xff0c;要么是自定义的类。如果要编写可以应用于多种类型的代码&#xff0c;这种刻板的限制对代码的束缚就会很大。----《java Generics FAQ》 多态算是一种泛化机制。例如&#xff0c;将方法的参…

weui-react项目实战新心得

weui-react简介 weui是微信官方制作的一个基础样式UI库&#xff0c;打造与原生微信同样的视觉和交互体验&#xff0c;整个UI库包括网页版和小程序版&#xff0c;网页版包括传统的javascript版和react版本。 个人对react的偏爱超过传统js版本&#xff0c;就用了react版本做为自己…

《ASP.NET Core 6框架揭秘》实例演示[10]:Options基本编程模式

依赖注入使我们可以将依赖的功能定义成服务&#xff0c;最终以一种松耦合的形式注入消费该功能的组件或者服务中。除了可以采用依赖注入的形式消费承载某种功能的服务&#xff0c;还可以采用相同的方式消费承载配置数据的Options对象&#xff0c;这篇文章演示几种典型的编程模式…

实现仿简书选取内容生成分享图片效果

前几天脑子里忽然闪过简书的图片分享效果&#xff0c;感觉很简洁也很漂亮&#xff0c;想着能不能用自己方式实现一下呢&#xff0c;于是今天就有了这篇文章。好了&#xff0c;先看下效果图吧&#xff1a; 项目地址: https://github.com/zhangke301... 欢迎star、issues~ 实现这…

千万级可观测数据采集器--iLogtail代码完整开源

2022年6月29日&#xff0c;阿里云iLogtail开源后迎来首次重大更新&#xff0c;正式发布完整功能的iLogtail社区版。本次更新开源全部C核心代码&#xff0c;该版本在内核能力上首次对齐企业版&#xff0c;开发者可以构建出与企业版性能相当的iLogtail云原生可观测性数据采集器。…

Java8新特性--CompletableFuture

并发与并行 Java 5并发库主要关注于异步任务的处理&#xff0c;它采用了这样一种模式&#xff0c;producer线程创建任务并且利用阻塞队列将其传递给任务的consumer。这种模型在Java 7和8中进一步发展&#xff0c;并且开始支持另外一种风格的任务执行&#xff0c;那就是将任务的…

python list对象

def append(self, p_object): # real signature unknown; restored from __doc__ """ L.append(object) -> None -- append object to end """ passappend函数将字符串插入到列表自身的末尾def clear(self): # real signature unknown; resto…

用 MAUI 在Windows 和 Linux 绘制 PPT 图表

我在做一个图表工具软件&#xff0c;这个软件使用 MAUI 开发。我的需求是图表的内容需要和 PPT 的图表对接&#xff0c;需要用到 OpenXML 解析 PPT 内容&#xff0c;读取到 PPT 图表元素的内容&#xff0c;接着使用 MAUI 渲染层绘制图表元素。图表工具软件需要在 Windows 平台和…

初窥Servlet

1. Servlet简介 Servlet是sun公司提供的一门用于开发动态web资源的技术。sun公司在其API中提供了一个servlet接口&#xff0c;用户若想要发一个动态web资源&#xff0c;只需要完成以下两步即可&#xff1a; 1&#xff09;编写一个servlet&#xff0c;即实现servlet接口的Java类…

聊聊接口性能优化的11个小技巧

前言 接口性能优化对于从事后端开发的同学来说&#xff0c;肯定再熟悉不过了&#xff0c;因为它是一个跟开发语言无关的公共问题。 该问题说简单也简单&#xff0c;说复杂也复杂。 有时候&#xff0c;只需加个索引就能解决问题。 有时候&#xff0c;需要做代码重构。 有时…

三元表达式,递归,匿名函数,内置函数

一 、三元表达式 只应用于条件成立返回一个值&#xff0c;条件不成立返回另一个值。   示例&#xff1a;    nameinput(姓名>>: )    resSB if name alex else NB    print(res) 注&#xff1a;通常使用场合为特别简单一眼读懂的地方。二…