Codeforces 798D
这两天后缀数组整多了整点有意思的,随机算法。
题意给你两个数组,让你求一个排列使得这个排列对应的两个数组前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的更多相关文章
- 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 想法题,数学证明
题意:给你两个数列a,b,你要输出k个下标,使得这些下标对应的a的和大于整个a数列的和的1/2.同时这些下标对应的b //题解:首先将条件换一种说法,就是要取floor(n/2)+1个数使得这些数大于 ...
- Codeforces 798D - Mike and distribution(二维贪心、(玄学)随机排列)
题目链接:http://codeforces.com/problemset/problem/798/D 题目大意:从长度为n的序列A和序列B中分别选出k个下表相同的数要求,设这两个序列中k个数和分别为 ...
- Codeforces 798D Mike and distribution (构造)
题目链接 http://codeforces.com/contest/798/problem/D 题解 前几天的模拟赛,居然出这种智商题..被打爆了QAQ 这个的话,考虑只有一个序列怎么做,把所有的排 ...
- 【codeforces 798D】Mike and distribution
[题目链接]:http://codeforces.com/contest/798/problem/D [题意] 让你选一个下标集合 p1,p2,p3..pk 使得2*(a[p1]+a[p2]+..+a ...
- Mike and distribution CodeForces - 798D (贪心+思维)
题目链接 TAG: 这是我近期做过最棒的一道贪心思维题,不容易想到,想到就出乎意料. 题意:给定两个含有N个正整数的数组a和b,让你输出一个数字k ,要求k不大于n/2+1,并且输出k个整数,范围为1 ...
- Codeforces 798D Mike and distribution
题目链接 题目大意 给定两个序列a,b,要求找到不多于个下标,使得对于a,b这些下标所对应数的2倍大于所有数之和. N<=100000,所有输入大于0,保证有解. 因为明确的暗示,所以一定找个. ...
- Codeforces 798D Mike and distribution(贪心或随机化)
题目链接 Mike and distribution 题目意思很简单,给出$a_{i}$和$b_{i}$,我们需要在这$n$个数中挑选最多$n/2+1$个,使得挑选出来的 $p_{1}$,$p_{2} ...
- python爬虫学习(5) —— 扒一下codeforces题面
上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...
随机推荐
- 重载jquery on方法实现click事件在移动端的快速响应
额,这个标题取的还真是挺装的... 其实我想表达的是jquery click事件如何在移动端自动转换成touchstart事件. 因为移动端click事件会比touchstart事件慢几拍 移动设备某 ...
- python实战===python程序打包成exe
推荐PyInstaller项目www.pyinstaller.org 安装方法: 先跑pip install pywin32再跑pip install pyinstaller即可 可用一句命令打包 ...
- ldconfig是一个动态链接库管理命令
ldconfig是一个动态链接库管理命令 为了让动态链接库为系统所共享,还需运行动态链接库的管理命令--ldconfig ldconfig 命令的用途,主要是在默认搜寻目录(/lib和/usr/li ...
- linux配置samba服务【原创】
转载请注明出处http://www.cnblogs.com/paul8339/p/7509981.html 需求,windows服务器访问linux的共享文件,需要linux服务器安装并配置samba ...
- http状态码说明
在学习网页设计的时候都应该知道状态码,但我们常见的状态码都是200,404,下面介绍其他的状态值 1开头的http状态码表示临时响应并需要请求者继续执行操作的状态代码. 100 (继续) 请求者应 ...
- PHP--- JSON和数组的转换
一.json_encode() <?php $arr =array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5); echo json_ ...
- Mysql授权允许远程访问
MySQL Community Edition(GPL) 在我们使用mysql数据库时,有时我们的程序与数据库不在同一机器上,这时我们需要远程访问数据库.缺省状态下,mysql的用户是没有远程访问的权 ...
- C#子线程中更新ui
本文实例总结了C#子线程更新UI控件的方法,对于桌面应用程序设计的UI界面控制来说非常有实用价值.分享给大家供大家参考之用.具体分析如下: 一般在winform C/S程序中经常会在子线程中更新控件的 ...
- HTML 禁止显示input默认提示信息
看问题 html代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- 用WP SMTP插件实现邮件发送功能
WordPress本身是采用mail()函数发邮件的,但是这样发出的邮件很容易被放入垃圾箱,很多主机商(特别是Windows主机)为了避免用户滥发邮件直接禁用了mail()函数,还有些云计算平台(比如 ...