who is the best?
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 128 Accepted Submission(s): 87
Problem Description
There are N people want to choose the best person. Each person select the best person
ai
, .John wants to know that who received the most number of votes.
Input
The first line contains a single integer
T(1≤T≤50)
,indicating the number of test cases.
Each test case begins with an integer N(1≤N≤100) ,indicating the number of person.
Next N lines contains an integer ai(1≤ai≤N) .
Each test case begins with an integer N(1≤N≤100) ,indicating the number of person.
Next N lines contains an integer ai(1≤ai≤N) .
Output
For each case, output an integer means who is the best person. If there are multiple answers, print the minimum index.
Sample Input
2 10 1 2 3 4 5 6 7 8 9 10 5 3 3 3 3 3
Sample Output
1 3
官方题解:
我们对于每个
ai
都进行计数,即
b[ai]++
,如此之后,我们可以一个循环语句
i=1−>n
来寻找最大的
bi
,注意此时应是
bi>MAX
,而不是
bi≤MAX
,这样才能保证出现的是编号最小的。另外需要注意的是每次做完后数组应当清0,否则会影响下次的答案,由于各种非确定性因素我在小数据就已经把没清0的程序卡死了。
代码:
#include <iostream> #include <cstdio> #include <cstring> using namespace std; int a[110]; int main() { int t,n; scanf("%d",&t); while(t--) { scanf("%d",&n); memset(a,0,sizeof(a)); int max=0; for(int i=0;i<n;i++) { int x; scanf("%d",&x); a[x]++; if(a[x]>max) max=a[x]; } int ans; for(int i=0;i<=n;i++) if(a[i]==max) { ans=i; break; } printf("%d\n",ans); } return 0; }