hdu 1004

 

Let the Balloon Rise

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 69548    Accepted Submission(s): 25847


Problem Description
Contest time again! How excited it is to see balloons floating around. But to tell you a secret, the judges' favorite time is guessing the most popular problem. When the contest is over, they will count the balloons of each color and find the result.

This year, they decide to leave this lovely job to you. 
 

Input
Input contains multiple test cases. Each test case starts with a number N (0 < N <= 1000) -- the total number of balloons distributed. The next N lines contain one color each. The color of a balloon is a string of up to 15 lower-case letters.

A test case with N = 0 terminates the input and this test case is not to be processed.
 

Output
For each case, print the color of balloon for the most popular problem on a single line. It is guaranteed that there is a unique solution for each test case.
 

Sample Input
      
      
5 green red blue red red 3 pink orange pink 0
 

Sample Output
      
      
red pink
 

Author
WU, Jiazhi
 

Source

此题虽然很水,由于自己对于字符串掌握实在是弱,第一时间没做出来。C++在处理字符串方面简单方便。

#include<iostream>
#include<string.h>
using namespace std;
int main()
{
    char a[1001][20];// 最大收获,二维数组的运用
    int n,i,j,max,b,c;
    while(cin>>n&&n!=0)
    {
        max=0;
        for(i=0;i<n;i++)
            cin>>a[i];
        for(i=0;i<n;i++)
        {
            b=1;
            for(j=i+1;j<n;j++)
             {
             if(strcmp(a[i],a[j])==0)  b++;
             }
             if(b>max)
             {
                 max=b;//我又想起来茫茫雪原的猎人。
                 c=i;
             }

        }
        cout<<a[c]<<endl;
    }
    return 0;
}


<think>好的,我需要解决用户的问题,即寻找杭电OJ 1004题的C++解法或相关方法。首先,我需要回忆一下HDU 1004题的具体内容。通常,杭电OJ的题目编号对应具体的问题,但用户没有给出题目名称,所以我得先确认1004题是什么题目。根据我的记忆,HDU 1004的题目通常是关于统计出现次数最多的颜色,即“气球颜色”问题。题目大意是给定多个测试用例,每个用例包含n个气球的颜色,要求输出出现次数最多的颜色。如果有多个颜色出现次数相同,则选择最后出现的那一个。 接下来,我需要确保这个信息的准确性,可能需要通过内部知识库或以往经验来确认。假设确认正确,接下来需要设计解题思路。题目要求统计出现次数最多的颜色,可以用哈希表(C++中的std::map或std::unordered_map)来记录每个颜色出现的次数。同时,需要记录当前最大次数以及对应的颜色,遍历所有颜色后输出结果。 然后,我需要考虑具体的代码实现。使用C++的话,可以逐个读取颜色字符串,用map统计次数,同时在遍历过程中更新最大值和对应的颜色。需要注意的是,当有多个颜色出现次数相同时,应选择最后出现的那个,因此在遍历时,当遇到次数相同的情况,需要更新颜色为当前的颜色,因为后面可能还会有同样次数的颜色出现,但题目要求选最后出现的,所以每次等于当前最大值时都要更新。 接着,代码的结构大致是:读取测试用例数,直到输入为0为止。对于每个用例,读取n,然后读取n个颜色字符串,统计次数,同时记录最大值和对应的颜色。需要注意的是,每次测试用例结束后要清空或重新初始化统计的数据结构。 然后,用户提供的引用内容中有一些C++代码片段,例如int temp = bfs(a, b, xx, yy, n, m); 这可能与图的广度优先搜索有关,但HDU 1004题是统计问题,所以这个引用可能不相关。不过用户可能是在其他问题中看到这个代码,这里需要确认是否正确引用。但根据用户的问题,应专注于1004题的解法,可能引用中的代码是用户在其他地方看到的,但这里可以忽略,因为与当前问题无关。 在代码实现时,可能的错误点包括:未正确处理多个测试用例,未在每次用例前重置统计变量,或者处理最大值更新时的逻辑错误。例如,当新的颜色次数等于当前最大值时,必须更新颜色为当前的颜色,以确保最后出现的颜色被保留。 最后,生成相关问题需要考虑用户可能对更高效的方法、处理多个最大值的情况,或者该问题在其他场景中的应用感兴趣。</think>### HDU OJ 1004 题解(C++实现) **题目描述** 输入多个测试用例,每个用例包含$n$个气球的颜色,要求输出出现次数最多的颜色。若次数相同,则选择最后出现的颜色。 **解题思路** 1. 使用`std::map`统计颜色出现次数。 2. 遍历颜色列表时,记录当前最大次数及其对应颜色。 3. 遇到相同次数时更新为当前颜色(确保最后出现的被保留)。 **参考代码** ```cpp #include <iostream> #include <string> #include <unordered_map> using namespace std; int main() { int n; while (cin >> n && n) { unordered_map<string, int> color_count; string color, max_color; int max_count = 0; for (int i = 0; i < n; ++i) { cin >> color; color_count[color]++; if (color_count[color] > max_count || (color_count[color] == max_count && i >= max_count)) { max_count = color_count[color]; max_color = color; } } cout << max_color << endl; } return 0; } ``` **代码说明** - `unordered_map`用于高效统计颜色出现次数。 - 遍历时动态更新最大值,若次数相同则保留最后出现的颜色[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值