UVA 10142 Australian Voting(模拟)

UVA 10142 Australian Voting(模拟)

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

UVA 10142 Australian Voting(模拟)此处内容已经被作者隐藏,请输入验证码查看内容
验证码:
请关注本站微信公众号,回复“”,获取验证码。在微信里搜索“”或者“”或者微信扫描右侧二维码都可以关注本站微信公众号。

题意:澳大利亚投票系统要求选民们将全部候选人按愿意选择的程度排序,一张选票就是一个排序。一開始,每张选票的首选项将被统计。若有候选人得票超过50%,他讲直接胜出;否则,全部并列最低的候选人出局,而那些将出局候选人排在第一位的选票将被又一次统计为排名最高的未出局候选人。这一筛选过程将持续进行,直到某个候选人得到超过50%的选票,或全部候选人得票同样。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
const int N = 50;
#define INF 0x3fffffff
int vote[1050][N];
int out[N], cnt[N];
char name[N][100];
int num;
int main()
{
    int T, n, i, j;
    char str[1000];
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);
        getchar();
        for(i = 1; i <= n; i++)
            gets(name[i]);
        num = 0;
        while(gets(str) != NULL)
        {
            if(!strcmp(str, "")) break;
            int len = strlen(str);
            int s = 0, k = 0;
            for(i = 0; i < len; i++)
            {
                if(str[i] >= '0' && str[i] <= '9')
                    s = s * 10 + str[i] - '0';
                else
                {
                    vote[num][k++] = s;
                    s = 0;
                }
            }
            vote[num][k++] = s;
            num++;
        }
        memset(out, 0, sizeof(out));
        int flag = 0, rest = n, total = 0;
        while(rest > 1) //未出局候选人数超过1
        {
            total = 0; //总票数
            memset(cnt, 0, sizeof(cnt));
            for(i = 0; i < num; i++)
            {
                for(j = 0; j < n; j++)
                {
                    if(!out[vote[i][j]])
                    {
                        cnt[vote[i][j]]++;
                        total++;
                        break;
                    }
                }
            }
            for(i = 1; i <= n; i++)
                if(cnt[i] * 2 > total && !out[i])
                {
                    printf("%s\n",name[i]);
                    flag = 1;
                    break;
                }
            if(flag) break;
            int mmin = INF, mmax = 0;
            for(i = 1; i <= n; i++)
            {
                if(!out[i])
                {
                    mmin = min(mmin, cnt[i]);
                    mmax = max(mmax, cnt[i]);
                }
            }
            if(mmin == mmax)
                break;
            for(i = 1; i <= n; i++)
                if(cnt[i] == mmin)
                {
                    out[i] = 1;
                    rest--;
                }
        }
        if(!flag)
        {
            for(i = 1; i <= n; i++)
                if(!out[i])
                    printf("%s\n", name[i]);
        }
        if(T > 0)
            printf("\n");
    }
    return 0;
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/117915.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Cloudsim_java源码大全

    Cloudsim_java源码大全CloudSim介绍和使用1.CloudSim简介:2.CloudSim提供了以下新的特点:(1)支持大型云计算的基础设施的建模与仿真;(2)一个自足的支持数据中心、服务代理人、调度和分配策略的平台。(3)CloudSim独特功能有:3.CloudSim源代码介绍几个核心类:4.CloudSim下载,CloudSim在IDEA中配置5.CloudSim环境配置6.CloudSim的扩展7.使用CloudSim仿真的一般步骤1.CloudSim简介:2009年4月8日,澳大利亚墨尔本

    2022年10月13日
  • 应用程序0xc000005解决办法

    应用程序无法正常启动0xc000005的解决方法1、右击显示无法正常启动0xc000005的应用程序,弹出菜单中选择属性。2、属性窗口中选择兼容性选项,选择以兼容模式运行这个程序。3、选择可以兼容此程序的系统,基本上都是选择Windows7系统,选择好之后点击确定,应用程序就可以正常打开。以上就是应用程序无法正常启动0xc000005的解决方案。…

  • java的几种排序算法(常用排序算法)

    1.插入排序publicclassInsertSort{publicstaticvoidsort(int[]arr){if(arr.length&amp;amp;amp;gt;=2){for(inti=1;i&amp;amp;amp;lt;arr.length;i++){//挖出一个要用来插入的值,同时位置上留下…

  • setPositiveButton和setNegativeButton的区别[通俗易懂]

    setPositiveButton和setNegativeButton的区别[通俗易懂]setPositiveButton和setNegativeButton的区别和setNeutralButton的区别三者都是AlertDialog弹出框的按钮,都是封装好的button,只是显示的位置不同,项目中可根据情况选择使用,setNegativeButton一般用于确认,setNegativeButton一般用于取消。newAlertDialog.Builder(MainActivi…

  • linux中的read函数_linux open函数

    linux中的read函数_linux open函数1.首先要打开目录文件DIR*opendir(constchar*name);DIR*fdopendir(intfd);2.读取目录文件信息的函数注意:这是个库函数structdirent*readdir(DIR*dirp);intreaddir_r(DIR*dirp,structdirent*entry,st…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号