zoukankan      html  css  js  c++  java
  • 【数学】Jersey Politics

                                                            Jersey Politics
    Time Limit: 1000MS   Memory Limit: 65536K
    Total Submissions: 5592   Accepted: 1413   Special Judge

    Description

    In the newest census of Jersey Cows and Holstein Cows, Wisconsin cows have earned three stalls in the Barn of Representatives. The Jersey Cows currently control the state's redistricting committee. They want to partition the state into three equally sized voting districts such that the Jersey Cows are guaranteed to win elections in at least two of the districts. 

    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

    * Line 1: A single integer, K 

    * 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 1..K: K lines that are the city numbers in district one, one per line 

    * 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

    Other solutions might be possible. Note that "2 3" would NOT be a district won by the Jerseys, as they would be exactly half of the cows.
     
    试题分析:
        我们可以想到把数组排一个序,然后取前2k个,分到S1、S2中去
        设S=(S1,S2)
        那么我们持续随机排序S,最终在满足条件时输出答案
      
        上面的策略固然能解决这个问题,但是随即排序S时间浪费太大
        那么我们要怎样呢?
        我们可以随机交换S1,S2中的元素,然后直到满足条件就可以了
     
    代码:
    #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();
    }
    

      

  • 相关阅读:
    Hive表中四种不同数据导出方式以及如何自定义导出列分隔符
    build doris 0.11.5 on centos 7/ubuntu
    centos7 gcc升级
    linux-nohup后台运行
    sqoop import mysql to hive table:GC overhead limit exceeded
    Hive开启mapjoin优化、并行执行、动态分区
    How to Plan and Configure YARN and MapReduce 2 in HDP 2.0
    Android 8 AudioPolicy 初始化
    Android 8 声音调整过程
    qcom wlan kernel 解读 WCNSS_qcom_cfg.ini 文件
  • 原文地址:https://www.cnblogs.com/wxjor/p/6206838.html
Copyright © 2011-2022 走看看