【数学】Jersey Politics
Time Limit: 1000MS | Memory Limit: 65536K | |||
Total Submissions: 5592 | Accepted: 1413 | Special Judge |
Description
Wisconsin has 3*K (1 <= K <= 60) cities of 1,000 cows, numbered 1..3*K, each with a known number (range: 0..1,000) of Jersey Cows. Find a way to partition the state into three districts, each with K cities, such that the Jersey Cows have the majority percentage in at least two of districts.
All supplied input datasets are solvable.
Input
* Lines 2..3*K+1: One integer per line, the number of cows in each city that are Jersey Cows. Line i+1 contains city i's cow census.
Output
* Lines K+1..2K: K lines that are the city numbers in district two, one per line
* Lines 2K+1..3K: K lines that are the city numbers in district three, one per line
Sample Input
2
510
500
500
670
400
310
Sample Output
1
2
3
6
5
4
Hint
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<stdlib.h>
#include<time.h>
using namespace std;
inline int read(){
int x=0,f=1;char c=getchar();
for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
for(;isdigit(c);c=getchar()) x=x*10+c-'0';
return x*f;
}
struct data{
int num,k;
}a[200],s1[61],s2[61],s3[61];//S1 S2满足条件
bool cmp(data a,data b){
return a.num>b.num;
}
int N;
bool judge(){
int sum=0,sum2=0;
for(int i=1;i<=N/3;i++) sum+=s1[i].num;//S1 sum
for(int i=1;i<=N/3;i++) sum2+=s2[i].num;
if(sum2>500*(N/3)&&sum>500*(N/3)) return true;
return false;
}
void change(){
//srand((unsigned int)time(0));加上这个POJ会给你显示RE
int tmp1=rand()%(N/3)+1;
int tmp2=rand()%(N/3)+1;
swap(s1[tmp1].num,s2[tmp2].num);
swap(s1[tmp1].k,s2[tmp2].k);
}
void print(){
for(int i=1;i<=N/3;i++) cout<<s1[i].k<<endl;
for(int i=1;i<=N/3;i++) cout<<s2[i].k<<endl;
for(int i=1;i<=N/3;i++) cout<<s3[i].k<<endl;
}
int main(){
N=read(),N*=3;
for(int i=1;i<=N;i++) a[i].num=read(),a[i].k=i;
sort(a+1,a+N+1,cmp); for(int i=1;i<=N/3;i++) //划分前k大到S1
s1[i].num=a[i].num,s1[i].k=a[i].k;
for(int i=N/3+1;i<=2*(N/3);i++) //划分前K+1~前2K大到S2
s2[i-N/3].num=a[i].num,s2[i-N/3].k=a[i].k;
for(int i=2*(N/3)+1;i<=N;i++)
s3[i-2*(N/3)].num=a[i].num,s3[i-2*(N/3)].k=a[i].k; while(!judge()) change();
print();
}
【数学】Jersey Politics的更多相关文章
- 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 ...
- Jersey Politics
poj2454:http://poj.org/problem?id=2454 题意:给你3*k个数,然后让你分成三堆,使得至少其中的两堆中的数字之和大于500*k.题解:这道题一开始我并不知道怎么做, ...
- 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个加起 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
随机推荐
- c语言完成宽带拨号
学校的网络每次开机都需要手动登陆,于是用c写了一个自动登陆的小程序... 程序功能超级简单...只是懒得每次都登陆... PS:代码功能具体没有测试...我自己用的是python #include & ...
- .Net 4.5 的async 和await 的简单理解使用
原文地址:http://www.cnblogs.com/HJL-Blog/p/4432632.html 所谓的异步编程是利用CPU空闲时间和多核的特性,它所返回的Task或Task<TResul ...
- Select Option
jQuery获取Select元素,并选择的Text和Value: 1. $("#select_id").change(function(){//code...}); //为Sele ...
- WPF整理-自定义一个扩展标记(custom markup extension)
"Markup extensions are used to extend the capabilities of XAML, by providing declarativeoperati ...
- Matlab的标记分水岭分割算法
1 综述 Separating touching objects in an image is one of the more difficult image processing operation ...
- 安卓中級教程(7):annotation中的 public @interface的用法
package com.example.ele_me.util; import java.lang.annotation.Retention; import java.lang.annotation. ...
- nodejs如何储存一个GBK编码的文件
思路:utf-8 -> decode(to buffer) -> convert to gbk(buffer also) -> write buffer to file. var f ...
- 微博mid和id转换
mid为62进制编码,id为常见的10进制编码. id从低位到高位,7个数字为一组,转换为62进制,并顺序合并,即转换为mid. mid从地位到高位,4个字母为一组,转换为10进制,并右移7位,计算和 ...
- 总结-mysql
执行sql脚本: source C:/users/liaolongjun/Desktop/miduo_fileinfo.sql; 注意,必须是正斜杆.如果是反斜杆,也会执行,但会报错. 导入数据: L ...
- .NET基于Redis缓存实现单点登录SSO的解决方案[转]
一.基本概念 最近公司的多个业务系统要统一整合使用同一个登录,这就是我们耳熟能详的单点登录,现在就NET基于Redis缓存实现单点登录做一个简单的分享. 单点登录(Single Sign On),简称 ...