随机化算法+贪心!

将3*k排序后分成3分,将第二第三份的和分别加起来,让和与500*k比较,都大于则输出,否则,随机生成2个数,在第二第三份中交换!

代码如下:

#include<iostream>
#include<stdio.h>
#include<cmath>
#include<algorithm>
using namespace std;
struct an
{
int w,lab;
}p[];
bool cmp(const an &a,const an &b)
{
return a.w<b.w;
}
int main()
{
int i,j,n,sa,sb,ans,a,b;
cin>>n;
for(i=;i<*n;i++){
cin>>p[i].w;
p[i].lab=i+;
}
sort(p,p+*n,cmp);
sa=;sb=;
for(i=n;i<n+n;i++)
sa+=p[i].w;
for(i=n+n;i<*n;i++)
sb+=p[i].w;
ans=n*;
bool flag=;
if(sa>ans&&sb>ans) flag=;
while(!flag){
a=rand()%n+n;
b=rand()%n+*n;
sa=sa-p[a].w+p[b].w;
sb=sb-p[b].w+p[a].w;
swap(p[a],p[b]);
if(sa>ans&&sb>ans){
flag=;
break;
}
}
for(i=;i<*n;i++)
cout<<p[i].lab<<endl;
return ;
}

poj 2454 Jersey Politics 随机化的更多相关文章

  1. POJ.2454.Jersey Politics(随机化算法)

    题目链接 \(Description\) 将长为\(3n\)的序列划分成\(3\)个子序列,要求至少有两个子序列的和都\(\geq 500*n\),输出任一方案.保证有解. \(Solution\) ...

  2. poj 2454 Jersey Politics dfs

    这个题目第一步还是比较明显的,先把最小的n个值去掉,剩下的问题就是能不能把数据分成两半,使得每一半和都大于n*500,这个刚开始考虑了下dp的做法,但是复杂度不满足要求. 那么能想到的就是搜索了,实际 ...

  3. 【POJ】2454.Jersey Politics

    题解 有种迷一样的讽刺效果 每个城市有1000头牛,然后你现在知道对于自己政党每个城市的选票,把城市划分成三个州,保证在至少两个州内获胜 找出前2K大的然后random_shuffle,直到前K个加起 ...

  4. 【数学】Jersey Politics

                                                            Jersey Politics Time Limit: 1000MS   Memory ...

  5. POJ2454——Jersey Politics

    POJ2454——Jersey Politics 题目大意: 在泽西奶牛和荷斯坦奶牛的最新普查中,威斯康星奶牛在谷仓中获得了三个档位. 泽西奶牛目前控制着国家重新分配委员会. 他们想将国家分为三个相当 ...

  6. [USACO2005][POJ2454]Jersey Politics(随机化)

    题目:http://poj.org/problem?id=2454 题意:给你3*k(k<=60)个数,你要将它们分成3个长度为k的序列,使得其中至少有两个序列的和大于k*500 分析:以为有高 ...

  7. Jersey Politics

    poj2454:http://poj.org/problem?id=2454 题意:给你3*k个数,然后让你分成三堆,使得至少其中的两堆中的数字之和大于500*k.题解:这道题一开始我并不知道怎么做, ...

  8. poj 3318 Matrix Multiplication 随机化算法

    方法1:暴力法 矩阵乘法+优化可以卡时间过的. 方法2:随机化 随机构造向量x[1..n],则有xAB=xC;这样可以将小运算至O(n^2). 代码如下: #include<iostream&g ...

  9. POJ2454 Jersey Politics

    Description In the newest census of Jersey Cows and Holstein Cows, Wisconsin cows have earned three ...

随机推荐

  1. abstract

    /// <summary> /// 抽象类不能被直接实例化 /// is a /// </summary> public abstract class BasePhone { ...

  2. Using LINQ Group By and String.Join() / Aggregate() in Entity Framework 3.5

    linq to sql 的时候,有时候需要用到 先group  然后来个 aggregate 串连一下值, 但会总会出错,说不识别 aggregate 或者 string.join 方法 搜遍网络 一 ...

  3. KindEditor配置步骤

    KindEditor是一套开源的HTML可视化编辑器,主要用于让用户在网站上获得所见即所得编辑效果,兼容IE.Firefox.Chrome.Safari.Opera等主流浏览器. KindEditor ...

  4. JAVA:避免重复的创建对象

    在实际开发中,重复使用同一个对象要比每次需要的时候就创建一个对象要好的多: 作为一个比较极端的反面例子,看下面这个语句: String s = new String("haha") ...

  5. Mac OS 踩坑指南

    前言 其实mac os本身还是很不错的,软硬结合使得其性能.效率.续航得到了很好的优化. 但是毕竟是一个"小众"操作系统,很多在Win上已经用习惯的东西在这里都没有,或者完全不一样 ...

  6. 静态的html页面想要设置使用浏览器缓存

    设置html页面缓存方法: 静态的html页面想要设置使用缓存: 通过HTTP的META设置expires和cache-control code 1.  <meta http-equiv=&qu ...

  7. 深入mongoDB(1)--mongod的线程模型与网络框架

    最近工作需要开始研究mongoDB,我准备从其源代码角度,对于mongod和mongos服务的架构.sharding策略. replicaset策略.数据同步容灾.索引等机制做一个本质性的了解.其代码 ...

  8. jQuery回车事件

    有网就是好. 全局事件: document.onkeydown=function(e){ var ev=document.all?window.evevt:e; if(ev.keyCode==13){ ...

  9. nginx如何实现404状态返回 200隐藏URL

    以http://WWW.cnblogs.COM为例: server        {                listen       80;                server_nam ...

  10. Python学习_算数运算函数

    记录以grades列表为例,分别定义输出.求和.平均值.方差和标准差函数,并输出相应的值 grades = [100, 100, 90, 40, 80, 100, 85, 70, 90, 65, 90 ...