这两天后缀数组整多了整点有意思的,随机算法。

题意给你两个数组,让你求一个排列使得这个排列对应的两个数组前n/2+1个数之和的二倍大于每个序列总和。

下面先贴下这题正解

二维贪心,按a从大到小排,把第一个拿着,以后每两个里面选一个a的性质可以满足。

b的话就在两个里面选一个b较大的,这样可以保证有一半的b都大于另一半的b。

 #include<bits/stdc++.h>
using namespace std;
const int N=1e5+;
typedef long long ll;
int n,ans[N],cnt;
struct node
{
int a,b,id;
bool operator <(const node &b)const{
return a>b.a;
}
}q[N];
int main()
{
scanf("%d",&n);
for(int i=;i<=n;++i)scanf("%d",&q[i].a),q[i].id=i;
for(int i=;i<=n;++i)scanf("%d",&q[i].b);
sort(q+,q++n);
ans[++cnt]=q[].id;
for(int i=;i<=n;i+=)
{
if(q[i].b>q[i+].b)
ans[++cnt]=q[i].id;
else ans[++cnt]=q[i+].id;
}
cout<<cnt<<endl;
for(int i=;i<=cnt;++i)
cout<<ans[i]<<" ";
return ;
}

下面就是随机化了。。。祝大家新年快乐。

 #include<bits/stdc++.h>
using namespace std;
const int N=1e5+;
typedef long long ll;
int n,ans[N],cnt;
ll sa,sb,ssa,ssb;
struct node
{
int a,b,id;
}q[N];
int main()
{
scanf("%d",&n);
for(int i=;i<=n;++i)scanf("%d",&q[i].a),q[i].id=i,sa+=q[i].a;
for(int i=;i<=n;++i)scanf("%d",&q[i].b),sb+=q[i].b;
while()
{
random_shuffle(q+,q++n);
ssa=ssb=;
for(int i=;i<=n/+;++i){
ssa+=q[i].a;ssb+=q[i].b;
}
if(ssa*>sa&&ssb*>sb){
cout<<n/+<<endl;
for(int i=;i<=n/+;++i)cout<<q[i].id<<" ";
return ;
}
}
return ;
}

Codeforces 798D的更多相关文章

  1. Codeforces 798D Mike and distribution - 贪心

    Mike has always been thinking about the harshness of social inequality. He's so obsessed with it tha ...

  2. CodeForces - 798D Mike and distribution 想法题,数学证明

    题意:给你两个数列a,b,你要输出k个下标,使得这些下标对应的a的和大于整个a数列的和的1/2.同时这些下标对应的b //题解:首先将条件换一种说法,就是要取floor(n/2)+1个数使得这些数大于 ...

  3. Codeforces 798D - Mike and distribution(二维贪心、(玄学)随机排列)

    题目链接:http://codeforces.com/problemset/problem/798/D 题目大意:从长度为n的序列A和序列B中分别选出k个下表相同的数要求,设这两个序列中k个数和分别为 ...

  4. Codeforces 798D Mike and distribution (构造)

    题目链接 http://codeforces.com/contest/798/problem/D 题解 前几天的模拟赛,居然出这种智商题..被打爆了QAQ 这个的话,考虑只有一个序列怎么做,把所有的排 ...

  5. 【codeforces 798D】Mike and distribution

    [题目链接]:http://codeforces.com/contest/798/problem/D [题意] 让你选一个下标集合 p1,p2,p3..pk 使得2*(a[p1]+a[p2]+..+a ...

  6. Mike and distribution CodeForces - 798D (贪心+思维)

    题目链接 TAG: 这是我近期做过最棒的一道贪心思维题,不容易想到,想到就出乎意料. 题意:给定两个含有N个正整数的数组a和b,让你输出一个数字k ,要求k不大于n/2+1,并且输出k个整数,范围为1 ...

  7. Codeforces 798D Mike and distribution

    题目链接 题目大意 给定两个序列a,b,要求找到不多于个下标,使得对于a,b这些下标所对应数的2倍大于所有数之和. N<=100000,所有输入大于0,保证有解. 因为明确的暗示,所以一定找个. ...

  8. Codeforces 798D Mike and distribution(贪心或随机化)

    题目链接 Mike and distribution 题目意思很简单,给出$a_{i}$和$b_{i}$,我们需要在这$n$个数中挑选最多$n/2+1$个,使得挑选出来的 $p_{1}$,$p_{2} ...

  9. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

随机推荐

  1. [SCOI2010]生成字符串 题解(卡特兰数的扩展)

    [SCOI2010]生成字符串 Description lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数 ...

  2. [POJ 2559]Largest Rectangle in a Histogram 题解(单调栈)

    [POJ 2559]Largest Rectangle in a Histogram Description A histogram is a polygon composed of a sequen ...

  3. 【leetcode 简单】 第五十一题 有效电话号码

    给定一个包含电话号码列表(一行一个电话号码)的文本文件 file.txt,写一个 bash 脚本输出所有有效的电话号码. 你可以假设一个有效的电话号码必须满足以下两种格式: (xxx) xxx-xxx ...

  4. 【leetcode 简单】第四十九题 颠倒二进制位

    颠倒给定的 32 位无符号整数的二进制位. 示例: 输入: 43261596 输出: 964176192 解释: 43261596 的二进制表示形式为 000000101001010000011110 ...

  5. 【leetcode 简单】 第七题 合并两个有序链表

    将两个有序链表合并为一个新的有序链表并返回.新链表是通过拼接给定的两个链表的所有节点组成的. 示例: 输入:1->2->4, 1->3->4 输出:1->1->2- ...

  6. ubuntu16.04中启动anaconda图形化界面

    $ source ~/anaconda3/bin/activate root $ anaconda-navigator

  7. 一款基于react-native的弹窗提示组件

    介绍一款基于react-native的弹窗提示插件 react-native-ms , github地址:https://github.com/jiangzhenfei/react-native-ms ...

  8. 24、CSS定位

    CSS定位方法 driver.find_element_by_css_selector() 1.CSS定位常用策略(方式) 1.id选择器 说明:根据元素id属性来选择 格式:#id 如:#userA ...

  9. 可怕的npm蠕虫

    https://hackernoon.com/im-harvesting-credit-card-numbers-and-passwords-from-your-site-here-s-how-9a8 ...

  10. 黑色的网站后台管理系统ui界面——后台

    链接:http://pan.baidu.com/s/1pLffwE3 密码:m4v6