[HDU1004] Let the balloon rise - 让气球升起来
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.
又是比赛时间!看见气球漂浮着是多么激动人心啊。但是告诉你一个秘密,裁判最喜欢的时间是才最受欢迎的问题。当比赛结束时,他们会数出每种颜色的气球然后得出结果。
今年,他们决定把这项可爱的工作留给你。
(注:好像ACM的标志就是气球)
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.
输入包含多组测试数据。每组数据以N(0 < N <= 1000)开始——放飞的气球总数。下面的N行各描述一个颜色。一个气球的颜色是一个最多有15个小写字母的字符串。
一组N为0的测试数据表示停止输入,并且这组数据不应被处理。
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.
对于每一组数据,使用一整行输出最热门的问题的气球的颜色。保证每组问题的解是唯一的。
分析
输入N个字符串,求出现次数最多的字符串。方法多种多样。
但是要注意:
1. N的范围是0<N<=1000,因此N也可以是1或2,如果是这样可以直接输出任意一个颜色(都是一样的)。因为N=1时,输入的就是出现最多的;N=2时,因为有唯一解,所以任意选一个输出。否则容易造成access violation。
2. 如果用char数组存储字符串,注意数组大小是[1000][16]而不是[16][1000],否则100%会造成access violation。
方法1
先输入全部字符串,然后按照字典顺序排序(C用qsort(),C++用sort())。从第一个一直检查到最后一个,看哪个出现的最多。
C
#include <stdio.h>
#include <stdlib.h>
#include <string.h> int cmp(const void *a, const void *b); int main()
{
int n;
char c[][]; // Not c[16][1000]!!!
while (scanf("%d", &n), n != )
{
int i;
for (i = ; i < n; i++)
scanf("%s", c[i]);
if (n == || n == )
{
printf("%s\n", c[]);
continue;
}
qsort(c, n, sizeof(c[]), cmp);
int ct = ;
int mx = ;
char * p;
for (i = ; i < n; i++)
{
if (strcmp(c[i], c[i - ]) == ) // Use strcmp() instead of == to compare two strings
ct++;
else
ct = ;
if (ct > mx)
{
mx = ct;
p = c[i];
}
}
printf("%s\n", p);
}
return ;
} int cmp(const void *a, const void *b)
{
return strcmp((char *)a, (char *)b);
}
P.S. 有个奇怪的地方。这样写就可以:
int n;
while (scanf("%d", &n), n != )
{
...
}
这样就超时:
int n;
scanf("%d", &n);
while (n != )
{
...
scanf("%d", &n);
}
用时:0ms
C++
C++中我就用了string和sort()进行排序。和C语言大体上是相似的。
#include <iostream>
#include <string>
#include <algorithm> int main()
{
using namespace std; int n;
string c[]; ios_base::sync_with_stdio(false); while (cin>>n, n!=)
{
int i;
for (i = ; i < n; i++)
cin >> c[i];
if (n == || n == )
{
cout << c[] << endl;
continue;
}
sort(c, c + n);
int ct = ;
int mx = ;
string & best = c[];
for (i = ; i < n; i++)
{
if (c[i] == c[i - ])
ct++;
else
ct = ;
if (ct > mx)
{
mx = ct;
best = c[i];
}
}
cout << best << endl;
} return ;
}
用时:15ms
方法2
先输入全部的字符串,然后对所有字符串,判断该字符串后面有几个与其相同的(也可以是前面)。数量最多的就是答案。
C
#include <stdio.h>
#include <string.h> int main()
{
int n;
char c[][];
int t[]; while (scanf("%d", &n), n != )
{
int i, j;
for (i = ; i < n; i++)
scanf("%s", c[i]);
for (i = ; i < n; i++)
t[i] = ;
int mx = ;
int best;
for (i = ; i < n - ; i++)
{
for (j = i + ; j < n; j++)
if (strcmp(c[i], c[j]) == )
t[i]++;
if (t[i] > mx)
{
mx = t[i];
best = i;
}
}
printf("%s\n", c[best]);
} return ;
}
用时:0ms
C++
#include <iostream>
#include <string>
#include <algorithm> int main()
{
using namespace std; int n;
string c[];
int t[]; ios_base::sync_with_stdio(false); while (cin >> n, n != )
{
int i, j;
for (i = ; i < n; i++)
cin >> c[i];
fill(t, t + n, ); // set all elements of t[] to 0
int mx = ;
int best;
for (i = ; i < n - ; i++)
{
for (j = i + ; j < n; j++)
if (c[i] == c[j])
t[i]++;
if (t[i] > mx)
{
mx = t[i];
best = i;
}
}
cout << c[best] << endl;
} return ;
}
用时:15ms
方法3
使用map/Map存储一个字符串出现的次数,出现最多的就是答案。注意C++中如果使用map,最好用string存储字符串。
C++
#include <iostream>
#include <map>
#include <string>
int main()
{
using namespace std; map<string, int> col;
int n; ios_base::sync_with_stdio(false); while (cin >> n, n != )
{
string s, p;
int mx = ;
for (int i = ; i < n; i++)
{
cin >> s;
col[s]++;
if (mp[s] > mx)
{
mx = col[s];
p = s;
}
}
cout << p << endl;
} return ;
}
用时:0ms
如果代码可以更好,可以在评论中指出!
注:本文可转载,转载请注明出处:http://www.cnblogs.com/collectionne/p/6792144.html
[HDU1004] Let the balloon rise - 让气球升起来的更多相关文章
- HDU1004 Let the Balloon Rise(map的简单用法)
Let the Balloon Rise Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- HDU1004——Let the Balloon Rise
Problem Description Contest time again! How excited it is to see balloons floating around. But to te ...
- hdu1004 Let the Balloon Rise
Problem Description Contest time again! How excited it is to see balloons floating around. But to te ...
- HDU 1004 Let the Balloon Rise【STL<map>】
Let the Balloon Rise Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Oth ...
- ACM Let the Balloon Rise
Contest time again! How excited it is to see balloons floating around. But to tell you a secret, the ...
- STL-map-A - Let the Balloon Rise
A - Let the Balloon Rise Contest time again! How excited it is to see balloons floating around. But ...
- hdu 1004 Let the Balloon Rise
Let the Balloon Rise Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Oth ...
- Let the Balloon Rise 分类: HDU 2015-06-19 19:11 7人阅读 评论(0) 收藏
Let the Balloon Rise Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Oth ...
- HDU 1004 Let the Balloon Rise map
Let the Balloon Rise Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Oth ...
随机推荐
- vb中创建xml
这里是原生的做法,具体使用可做相应的封装: Private Function GetUpdateRoomXml() As String Dim xmlDOM As New Xm ...
- 概念学习 - JNDI, JDBC, ODBC, DataSource
layout: post title: 概念学习 - JNDI, JDBC, ODBC, DataSource --- 最近在学习Java Hibernate,对数据库资源访问这块好多概念模糊,所以在 ...
- Oracle的登陆问题和初级学习增删改查(省略安装和卸载)
1:学习Oracle首先需要安装Oracle,网上已经有很多很多教程了,这里不做叙述,自己百度即可,这里安装的标准版,个人根据需求安装学习或者企业开发即可.如果安装出错,自己百度Oracle的卸载即可 ...
- win7下安装memcached出现failed to install service or service already installed解决办法
安装memcached时总是提示“failed to install service or service already installed”,开始以为是版本问题,就下了好几个不同版本,可还是老问题 ...
- Measuring & Optimizing I/O Performance
By Ilya Grigorik on June 23, 2009 Measuring and optimizing IO performance is somewhat of a black art ...
- 如何在 ASP.NET Core 中发送邮件
前言 我们知道目前 .NET Core 还不支持 SMTP 协议,当我么在使用到发送邮件功能的时候,需要借助于一些第三方组件来达到目的,今天给大家介绍两款开源的邮件发送组件,它们分别是 MailKit ...
- ORA-01034: ORACLE not available ORA-27101: shared memory realm does not exist
Oracle 设置默认数据库 如果我们的服务器上或者电脑上安装了多个数据库,当我们使用sqlplus时如果为指定数据库时登录到的是哪一个数据库呢?今天遇到了一个老问题: ORA-01034: ORAC ...
- javascript 六种数据类型(一)
js的数据类型和常见隐式转化逻辑. 一.六种数据类型 原始类型(基本类型):按值访问,可以操作保存在变量中实际的值.原始类型汇总中null和undefined比较特殊. 引用类型:引用类型的值是保存在 ...
- 【2017-05-05】timer控件、三级联动、帐号激活权限设置
一.Timer控件 Timer实际就是一个线程控件. 属性:Enabled 是否被启用 Interval 多长时间执行一次控件中的代码 事件: Tick 事件中放要执行的代码. ...
- 【python的基本数据类型及进制扫盲】
一.进制 1.进制简介 进制就是进位制,是人们规定的一种进位方法.计算机底层的数据运算和存储都是二进制数据.计算机语言就是二进制,计算机能直接识别二进制数据,其它数据都不能直接识别. 2.常用进制 对 ...