Codeforces 570 A. Elections

简介:

click here ~~

                                           ***A. Elections***

The country of Byalechinsk is running elections involving n candidates. The country consists of m cities. We know how many people in each city voted for each candidate.

The electoral system in the country is pretty unusual. At the first stage of elections the votes are counted for each city: it is assumed that in each city won the candidate who got the highest number of votes in this city, and if several candidates got the maximum number of votes, then the winner is the one with a smaller index.

At the second stage of elections the winner is determined by the same principle over the cities: the winner of the elections is the candidate who won in the maximum number of cities, and among those who got the maximum number of cities the winner is the one with a smaller index.

Determine who will win the elections.

Input
The first line of the input contains two integers n, m (1 ≤ n, m ≤ 100) — the number of candidates and of cities, respectively.

Each of the next m lines contains n non-negative integers, the j-th number in the i-th line aij (1 ≤ j ≤ n, 1 ≤ i ≤ m, 0 ≤ aij ≤ 109) denotes the number of votes for candidate j in city i.

It is guaranteed that the total number of people in all the cities does not exceed 109.

Output
Print a single numberthe index of the candidate who won the elections. The candidates are indexed starting from one.

题意:
给出n行m列,代表第i个城市对第j的选手的票数data[i][j],选举分为两次,第一次,每个城市选出这个城市得票最高的选手成为胜利者,如果票数一样,选编号最小的,然后第二轮,选择这些人里面在各个城市被选的胜利次数最多的选手作为最终胜利者,如果次数一样,选编号最小的。

直接上代码:

/*
Date : 2015-8-26 晚上
Author : ITAK

Motto :

今日的我要超越昨日的我,明日的我要胜过今日的我;
以创作出更好的代码为目标,不断地超越自己。
*/
#include <iostream>
#include <cstring>
using namespace std;
int data[105][105];
int ans[105];
int main()
{
    int m, n, j, i, ind;
    while(cin>>m>>n)
    {
        memset(ans, 0, sizeof(ans));
        for(i=0; i<n; i++)
        {
            int Max = -999;
            for(j=0; j<m; j++)
            {
                cin>>data[i][j];
                if(data[i][j] > Max)
                {
                     Max = data[i][j];
                     ind = j;
                }
            }
            ans[ind]++;
        }
        int Max = -9999;
        for(i=0; i<m; i++)
            if(ans[i] > Max)
            {
                Max = ans[i];
                ind = i;
            }
        cout<<ind+1<<endl;
    }
    return 0;
}
/**
input
3 3
1 2 3
2 3 1
1 2 1

output
2

input
3 4
10 10 3
5 1 6
2 2 2
1 5 7

output
1
**/
目录
相关文章
codeforces 322 B Ciel and Flowers
有红绿蓝三种颜色的画,每种拿三朵可以组成一束花,或者各拿一朵组成花束,告诉你每种花的数目,求出可能组成最多的花束。 如果你的代码过不了,考虑一下 8 8 9这种组合。 因为数据量很大,我的思想就是局部和总体采用不同的策略。
58 0
codeforces 312
A. Whose sentence is it?
58 0
|
8月前
codeforces
【6月更文挑战第10天】
45 0
codeforces 304A. Pythagorean Theorem II
给你一个n,计算出1 ≤ a ≤ b ≤ c ≤ n.使得由abc构成的三角形满足勾股定理,c为斜边。 没有简单的方法,直接爆力,但是要注意,有些abc满足勾股定理的表达式,但不一定是三角形,所以要判断一下,根据三角形三边的性质,两边之和大于第三边,两边之差小于第三边。
76 0
codeforces 322 A Ciel and Dancing
有n个男孩和m个女孩,他们要结对跳舞,每对要有一个女孩和一个男孩,而且其中一个要求之前没有和其他人结对,求出最大可以结多少对。
46 0
|
C++
codeforces 305 C. Ivan and Powers of Two
我的思路是这样的,由2^a+2^a = 2^(a+1)可知,如果有两个连续的数a,我们可以把他们合并为a+1放入集合中,使集合中没有重复的数,我可以用stl里的set。如果想要满足题目中的要求,集合中必须有最大那个数个元素,缺多少就可以计算出来了。
36 0
codeforces 327 A Ciel and Dancing
给你一串只有0和1的数字,然后对某一区间的数翻转1次(0变1 1变0),只翻转一次而且不能不翻转,然后让你计算最多可能出现多少个1。 这里要注意很多细节 比如全为1,要求必须翻转,这时候我们只要翻转一个1就可以了,对于其他情况,我们只要计算区间里面如果0多于1,将其翻转后计算1的总数,然后取最大值。
52 0
C - Rumor CodeForces - 893C
C - Rumor CodeForces - 893C
99 0
Codeforces 591B Rebranding
B. Rebranding time limit per test:2 seconds memory limit per test:256 megabytes input:standard input output:standard output ...
863 0