Codeforces 798D - Mike and distribution(二维贪心、(玄学)随机排列)
题目链接:http://codeforces.com/problemset/problem/798/D
题目大意:从长度为n的序列A和序列B中分别选出k个下表相同的数要求,设这两个序列中k个数和分别为ta,tb,两个序列总和分别为asum,bsum。要求ta*2>asum&&tb*2>bsum,k<=n/2+1.
解题思路:首先,肯定要选n/2+1的吧。我们把序列A当成第一层,序列B当成第二层。第一层:按从大到小严格排好。在第二层上:每两个取大的那一个,那最后的和肯定>=总和的一半,而且再加上第一个,所以所选数的和和>总和的一半。
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=1e6+; struct node {
int a;
int b;
int num;
}t[N]; bool cmp(node x,node y){
return x.a>y.a;//第一层按从大到小排好
} int main(){
ios::sync_with_stdio(false);
int n;
cin>>n;
for(int i=;i<=n;i++){
cin>>t[i].a;
}
for(int i=;i<=n;i++){
cin>>t[i].b;
t[i].num=i;
}
sort(t+,t++n,cmp);
cout<<n/+<<endl;
cout<<t[].num<<" ";
for(int i=;i<=n;i+=){
cout<<(t[i].b>t[i+].b?t[i].num:t[i+].num)<<" ";//两两取较大的那个
}
cout<<endl;
return ;
}
还有一种利用random_shuffle随机排列来写的,就是每次排好都选前k个,总会选到符合条件的答案,玄学。。。。:
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<time.h>
using namespace std;
const int N=1e6+;
typedef long long LL;
struct node {
int a;
int b;
int num;
}t[N]; int main(){
ios::sync_with_stdio(false);
int n;
cin>>n;
LL asum=,bsum=;
for(int i=;i<=n;i++){
cin>>t[i].a;
asum+=t[i].a;
}
for(int i=;i<=n;i++){
cin>>t[i].b;
t[i].num=i;
bsum+=t[i].b;
}
cout<<n/+<<endl;
srand(time(NULL));
while () {
random_shuffle(t+, t+n+);
LL ta=,tb=;
for(int i=;i<=n/+;i++){
ta+=t[i].a;
tb+=t[i].b;
}
if (*ta>asum&&*tb>bsum) {
for(int i=;i<=n/+;i++){
cout<<t[i].num<<" ";
}
cout<<endl;
return ;
}
}
return ;
}
Codeforces 798D - Mike and distribution(二维贪心、(玄学)随机排列)的更多相关文章
- 【算法系列学习】codeforces D. Mike and distribution 二维贪心
http://codeforces.com/contest/798/problem/D http://blog.csdn.net/yasola/article/details/70477816 对于二 ...
- Codeforces 798D Mike and distribution - 贪心
Mike has always been thinking about the harshness of social inequality. He's so obsessed with it tha ...
- Codeforces 798D Mike and distribution(贪心或随机化)
题目链接 Mike and distribution 题目意思很简单,给出$a_{i}$和$b_{i}$,我们需要在这$n$个数中挑选最多$n/2+1$个,使得挑选出来的 $p_{1}$,$p_{2} ...
- CodeForces - 798D Mike and distribution 想法题,数学证明
题意:给你两个数列a,b,你要输出k个下标,使得这些下标对应的a的和大于整个a数列的和的1/2.同时这些下标对应的b //题解:首先将条件换一种说法,就是要取floor(n/2)+1个数使得这些数大于 ...
- Codeforces 798D Mike and distribution (构造)
题目链接 http://codeforces.com/contest/798/problem/D 题解 前几天的模拟赛,居然出这种智商题..被打爆了QAQ 这个的话,考虑只有一个序列怎么做,把所有的排 ...
- Codeforces 798D Mike and distribution
题目链接 题目大意 给定两个序列a,b,要求找到不多于个下标,使得对于a,b这些下标所对应数的2倍大于所有数之和. N<=100000,所有输入大于0,保证有解. 因为明确的暗示,所以一定找个. ...
- Codeforces 869E. The Untended Antiquity (二维Fenwick,Hash)
Codeforces 869E. The Untended Antiquity 题意: 在一张mxn的格子纸上,进行q次操作: 1,指定一个矩形将它用栅栏围起来. 2,撤掉一个已有的栅栏. 3,询问指 ...
- CodeForces 242E - XOR on Segment 二维线段树?
今天练习赛的题....又是线段树的变换..拿到题我就敲了个点更新区间查询的..果断超时...然后想到了可以将每个数与合表示成不进位的二进制数..这样就可以区间进行更新了..比赛的时候写搓了..刚重写了 ...
- Codeforces 1080C 题解(思维+二维前缀和)
题面 传送门 题目大意: 有一个黑白的棋盘,现在将棋盘上的一个子矩形全部染成黑色,另一个子矩形全部染成白色 求染完色后黑,白格子的总数 分析 我们可以发现,对于一个(1,1)到(x,y)的矩形,若xy ...
随机推荐
- 菜鸟在线教你用Unity3D开发VR版的Hello World
大家好,我是菜鸟在线的小编.这篇短文将告诉大家如何用Unity3D开发VR版的Hello World. 1开启SteamVR并连接Vive设备 (a)登录Steam客户端,并点击右上角的VR按钮,这时 ...
- 解决:warning LNK4098: 默认库“MSVCRT”与其他库的使用冲突;找到 MSIL .netmodule 或使用 /GL 编译的模块;正在。。;LINK : warning LNK4075: 忽略“/INCREMENTAL”(由于“/LTCG”规范)
原文链接地址:https://www.cnblogs.com/qrlozte/p/4844411.html 参考资料: http://blog.csdn.net/laogaoav/article/de ...
- Spring MVC POJO入参过程分析
SpringMVC确定目标方法POJO类型的入参过程 1.确认一个key: (1).若目标方法的POJO类型的参数没有使用@ModelAttribute作为修饰,则key为POJO类名第一个字母的小写 ...
- (转)ARC指南 - strong、weak指针
一.简介 ARC是自iOS 5之后增加的新特性,完全消除了手动管理内存的烦琐,编译器会自动在适当的地方插入适当的retain.release.autorelease语句.你不再需要担心内存管理,因为编 ...
- kotlin Hello World 以及关键字
hello world:(支持函数式编程,不需要放到 class 中) fun main(args: Array<String>) { println("Hello World& ...
- java中16进制转换10进制
java中16进制转换10进制 public static void main(String[] args) { String str = "04e1"; String myStr ...
- OpenCV---膨胀与腐蚀
膨胀 腐蚀 一:膨胀实现dilate import cv2 as cv import numpy as np def dilate_demo(image): #膨胀 print(image.shape ...
- Anagrams by Stack(深度优先搜索)
ZOJ Problem Set - 1004 Anagrams by Stack Time Limit: 2 Seconds Memory Limit: 65536 KB How can a ...
- 不用注解添加controller抛出No adapter for handler异常
不用注解添加controller时会抛出No adapter for handler异常. 解决方法:在DispatcherServlet的配置文件(***-servlet.xml)中加入如下两行: ...
- ArrayList既然继承自AbstractList抽象类,而AbstractList已经实现了List接口,那么ArrayList类为何还要再实现List接口呢?
https://www.cnblogs.com/bluejavababy/p/4320545.html