Jersey Politics
poj2454:http://poj.org/problem?id=2454
题意:给你3*k个数,然后让你分成三堆,使得至少其中的两堆中的数字之和大于500*k。
题解:这道题一开始我并不知道怎么做,准备采用随机算法,初始化的时候使其分成3堆,然后每次从每一堆中rand一个数,依次的进行交换,但是交了几版,发现都是wa。最后
才知道要用贪心。把数字进行降序排序,然后把前2*k个给两堆,只要前两堆都满足大于500*k,如果不满足,那么对于更小的数的组合就不可能满足了。然后最前两堆进行随机算法
每次rand一个,然后相互交换,找到满足条件的即可!
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
int kind[];
int k,timelimit;
int sum1,sum2;
struct Node {
int w;
int id;
}node[];
int cmp(Node a,Node b ){
return a.w>b.w;
}
int main(){
scanf("%d",&k);
sum1=sum2; int t;
timelimit=;memset(kind,,sizeof(kind));
for(int i=;i<=*k;i++){
scanf("%d",&node[i].w);
node[i].id=i;
}
sort(node+,node+*k+,cmp);
for(int i=;i<=*k;i++){
if(i<=k){
kind[i]=;
sum1+=node[i].w;
}
else if(i<=*k){
kind[i]=;
sum2+=node[i].w;
}
}
if(sum1>*k&&sum2>*k)t=;
else t=timelimit*;
while(t--){
int a,b;
while(true){
a=rand()%(*k)+;
if(kind[a]==)break;
}
while(true){
b=rand()%(*k)+;
if(kind[b]==)break;
}
sum1+=node[b].w-node[a].w,kind[a]=;
sum2+=node[a].w-node[b].w,kind[b]=;
if(sum1>*k&&sum2>*k)break;
}
for(int i=;i<=*k;i++)
if(kind[i]==)printf("%d\n",node[i].id);
for(int i=;i<=*k;i++)
if(kind[i]==)printf("%d\n",node[i].id);
for(int i=;i<=*k;i++)
if(kind[i]==)printf("%d\n",node[i].id); }
Jersey Politics的更多相关文章
- 【数学】Jersey Politics
Jersey Politics Time Limit: 1000MS Memory ...
- POJ2454——Jersey Politics
POJ2454——Jersey Politics 题目大意: 在泽西奶牛和荷斯坦奶牛的最新普查中,威斯康星奶牛在谷仓中获得了三个档位. 泽西奶牛目前控制着国家重新分配委员会. 他们想将国家分为三个相当 ...
- POJ2454 Jersey Politics
Description In the newest census of Jersey Cows and Holstein Cows, Wisconsin cows have earned three ...
- [USACO2005][POJ2454]Jersey Politics(随机化)
题目:http://poj.org/problem?id=2454 题意:给你3*k(k<=60)个数,你要将它们分成3个长度为k的序列,使得其中至少有两个序列的和大于k*500 分析:以为有高 ...
- poj 2454 Jersey Politics 随机化
随机化算法+贪心! 将3*k排序后分成3分,将第二第三份的和分别加起来,让和与500*k比较,都大于则输出,否则,随机生成2个数,在第二第三份中交换! 代码如下: #include<iostre ...
- poj 2454 Jersey Politics dfs
这个题目第一步还是比较明显的,先把最小的n个值去掉,剩下的问题就是能不能把数据分成两半,使得每一半和都大于n*500,这个刚开始考虑了下dp的做法,但是复杂度不满足要求. 那么能想到的就是搜索了,实际 ...
- POJ.2454.Jersey Politics(随机化算法)
题目链接 \(Description\) 将长为\(3n\)的序列划分成\(3\)个子序列,要求至少有两个子序列的和都\(\geq 500*n\),输出任一方案.保证有解. \(Solution\) ...
- 【POJ】2454.Jersey Politics
题解 有种迷一样的讽刺效果 每个城市有1000头牛,然后你现在知道对于自己政党每个城市的选票,把城市划分成三个州,保证在至少两个州内获胜 找出前2K大的然后random_shuffle,直到前K个加起 ...
- 浅浅地谈一下随机算法【poj2454】【poj3318】
随机算法我也只是稍微接触了一下,就是想写篇博客自己稍微总结一下 其实随机算法也算是一个玄学吧,运气不好还是会wa.但是我们知道,计算机可以在短时间内计算大量的数据,所以碰到正确答案的概率还是挺大的. ...
随机推荐
- SQL Server里的 ISNULL 与 NULLIF
SQL Server 中有两个參数,语法: ISNULL(check_expression, replacement_value) check_expression 与 replacement ...
- [转] react-native 之布局篇
PS: 苹果使用的宽度单位是为了设计开发者在应用上使用接近的数值.比如宽度范围都在320-414之间.但是宽度对应到像素是有一个转换比例的,对于背景图尤其要准备足够像素的图片.这个足够像素可以通过公式 ...
- 9.26 noip模拟试题
魔术球问题弱化版(ball.c/.cpp/.pas) 题目描述 假设有 n 根柱子,现要按下述规则在这 n 根柱子中依次放入编号为 1,2,3,…的球. (1)每次只能在某根柱子的最上面放球. (2) ...
- Castle Windsor Fluent Registration API
一对一注册 直接注册组件 container.Register( Component.For<MyServiceImpl>() ); 注册接口并提供组件 container.Registe ...
- ASP.NET-FineUI开发实践-16(一)
还是基础的东西,grid全选没有事件,给加个事件,除了需要会复制粘贴外还要点推荐那! 第一步:原理 事件被触发,方法被实现. 对于全选事件,被触发有两种方式可写,一个是通过原生extjs方式触发 ...
- Encapsulation.
Access control is often referred to as implementation hiding. Wrapping data and methods within class ...
- webServices 执行流程,(我是菜鸟,我怕谁,仅代表个人理解,欢迎各位大神们指导,不和您的胃口,请默默离开!!)
二.上图仅仅代表个人理解,下面以代码方式解释一下. (1) strtus.xml <?xml version="1.0" encoding="UTF-8" ...
- JSONModel的基本使用
JSONModel 是一个库,它能智能并且快速的创建出数据 model,你可以在你的 iOS 项目或者 OSX 项目上使用它. 使用前准备 添加 JSONModel 到你的工程中 1.需要的环境: A ...
- iOS菜鸟之苹果开发者账号的注册
大家一起来讨论讨论苹果开发者账号的注册(主要是以公司的开发者账号为例),前段时间公司要求注册开发者账号,于是我就特地看了看相关的帖子.这里简单给大家总结一下具体的流程. 首先你要登陆这个网址,进去之后 ...
- C#读取Visual FoxPro(*.dbf)数据并使用SqlBulkCopy插入到SqlServer 2008 R2数据表中
公司数据库从32位的SqlServer 2005升级到64位的SqlServer 2008 R2后,无法再像原来通过Link Server连接VFP同步数据,因此考虑用代码程序从VFP数据库中读取所需 ...