文章标题 HDU 5578 :Friendship of Frog(暴力+map)
2016-11-05 23:34
381 查看
Friendship of Frog
Descriptionfrogs from different countries are standing in a line. Each country is represented by a lowercase letter. The distance between adjacent frogs (e.g. the and the frog, the and the frog, etc) are exactly . Two frogs are friends if they come from the same country.
The closest friends are a pair of friends with the minimum distance. Help us find that distance.
Input
First line contains an integer , which indicates the number of test cases.
Every test case only contains a string with length , and the character of the string indicates the country of frogs.
.
for 80% data, .
for 100% data, .
the string only contains lowercase letters.
Output
For every test case, you should output ” Case #x: y”, where indicates the case number and counts from and is the result. If there are no frogs in same country, output instead.
Sample Input
2
abcecba
abc
Sample Output
Case #1: 2
Case #2: -1
Source
2015ACM/ICPC亚洲区上海站-重现赛(感谢华东理工)
题意:题意大概可以简化为给你一个字符串,然后找到这个串中相同的两个字符最近的距离,如果没有相同的字符就输出-1.
分析:直接从头开始遍历,遇到不同的字符就记录当前字符的位置还有最短距离(初始化为INF),遇到相同的就与前面记录的距离最近的相同字符判断是否比之前记录的距离短,是的话就更新最短距离;然后将位置移到当前字符的位置。最后只需要遍历一遍所有出现过的字符的最短距离即可。
代码:
#include<iostream> #include<string> #include<cstdio> #include<cstring> #include<vector> #include<math.h> #include<map> #include<queue> #include<algorithm> using namespace std; const int inf = 0x3f3f3f3f; struct node { char c; int place;//位置 int dis; //距离 }; node a[1005]; char ch[1005]; int main () { int t; scanf ("%d",&t); int count=1; while (t--){ scanf ("%s",ch); int len=strlen(ch); for (int i=0;i<1000;i++)a[i].dis=inf;//初始化 map<char,int>mp;//用来判断字符是否出现 int cnt=0;//不同字符的数目 for (int i=0;i<len;i++){ if (mp.find(ch[i])==mp.end()){ //如果之前还没出现过 a[cnt].c=ch[i]; a[cnt].dis=inf; a[cnt].place=i;//记录位置 mp[ch[i]]=cnt++;//添加映射,然后cnt++ } else {//如果已经有了 a[mp[ch[i]]].dis=min(a[mp[ch[i]]].dis,i-a[mp[ch[i]]].place);//去距离短的 a[mp[ch[i]]].place=i;//更新位置 } } if (cnt==len){//入股欧不同字符与长度相等,说明没有相同的两个字符 printf ("Case #%d: -1\n",count++); continue; } int ans=inf; for (int i=0;i<cnt;i++){//找最小的距离 ans=min(ans,a[i].dis); } printf ("Case #%d: %d\n",count++,ans); } return 0; }
相关文章推荐
- hdu-5578 Friendship of Frog(暴力)
- HDU 5578 Friendship of Frog(暴力)——2015ACM/ICPC亚洲区上海站
- HDU 5578 Friendship of Frog 暴力
- HDU 5578 Friendship of Frog 暴力搜索
- HDU 5578 Friendship of Frog(暴力)
- hdu 5578 Friendship of Frog(multiset的应用)
- HDU-5578-Friendship of Frog【2015上海赛区】
- hdu 5578 Friendship of Frog
- HDU-5578-Friendship of Frog【2015上海赛区】(水题)
- hdu 5578 Friendship of Frog 2015ACM/ICPC亚洲区上海站-重现赛
- 文章标题 HDU 5583:Kingdom of Black and White(暴力+代码实现能力)
- HDU 5578 Friendship of Frog 水题
- hdu 5578 Friendship of Frog(水)
- 文章标题 HDU 1217 : Arbitrage(最短路--Floyd+map)
- hdu 5578 Friendship of Frog【水题】
- 文章标题 HDU 5113 : Black And White (dfs+剪枝)
- 文章标题 HDU 5272:Dylans loves numbers( 水)
- 文章标题 HDU 1176:免费馅饼 (DP)
- 文章标题 HDU 3853:LOOPS (概率DP)
- HDU 5726-GCD(暴力+map)