POJ 3096 surprising_string (coding with STL <map> )
2013-10-13 20:46
197 查看
[Description]:
The D-pairs of a string of letters are the ordered pairs of letters that are distance D from each other. A string is D-unique if all of its D-pairs are different. A string is surprising if it is D-unique for every possible
distance D.
Consider the string ZGBG. Its 0-pairs are ZG, GB, and BG. Since these three pairs are all different, ZGBG is 0-unique. Similarly, the 1-pairs of ZGBG are ZB and GG, and since these two pairs are different, ZGBG is 1-unique. Finally, the only 2-pair of ZGBG
is ZG, so ZGBG is 2-unique. Thus ZGBG is surprising. (Note that the fact that ZG is both a 0-pair and a 2-pair of ZGBG is irrelevant, because 0 and 2 are different distances.)
Acknowledgement: This problem is inspired by the "Puzzling Adventures" column in the December 2003 issue of Scientific American.
[Input]:
The input consists of one or more nonempty strings of at most 79 uppercase letters, each string on a line by itself, followed by a line containing only an asterisk that signals the end
of the input.
[Output]:
For each string of letters, output whether or not it is surprising using the exact output format shown below.
[Sample Input]:
[Sample Output]:
解题思想:从要求来看,即定义D-pairs表示取字符串s中相距为D的两个字母所构成的字母对,该字母对中两个字母的位置顺序与他们在主串s中的位置顺序一致定义D-unique表示,若从字符串s中取出所有相距为D的字母对D-pairs,且这些D-pairs都是独一无二的,那么成字符串s是一个D-unique串D的取值范围为0~s.len()-2。然后这个用map的键值对来标记结果检测时更为方便。当然C的flag标记方式也可以,总的来说在大神看来是道简单的poj题目。
souce_code:
The D-pairs of a string of letters are the ordered pairs of letters that are distance D from each other. A string is D-unique if all of its D-pairs are different. A string is surprising if it is D-unique for every possible
distance D.
Consider the string ZGBG. Its 0-pairs are ZG, GB, and BG. Since these three pairs are all different, ZGBG is 0-unique. Similarly, the 1-pairs of ZGBG are ZB and GG, and since these two pairs are different, ZGBG is 1-unique. Finally, the only 2-pair of ZGBG
is ZG, so ZGBG is 2-unique. Thus ZGBG is surprising. (Note that the fact that ZG is both a 0-pair and a 2-pair of ZGBG is irrelevant, because 0 and 2 are different distances.)
Acknowledgement: This problem is inspired by the "Puzzling Adventures" column in the December 2003 issue of Scientific American.
[Input]:
The input consists of one or more nonempty strings of at most 79 uppercase letters, each string on a line by itself, followed by a line containing only an asterisk that signals the end
of the input.
[Output]:
For each string of letters, output whether or not it is surprising using the exact output format shown below.
[Sample Input]:
ZGBG X EE AAB AABA AABB BCBABCC *
[Sample Output]:
ZGBG is surprising. X is surprising. EE is surprising. AAB is surprising. AABA is surprising. AABB is NOT surprising. BCBABCC is NOT surprising
解题思想:从要求来看,即定义D-pairs表示取字符串s中相距为D的两个字母所构成的字母对,该字母对中两个字母的位置顺序与他们在主串s中的位置顺序一致定义D-unique表示,若从字符串s中取出所有相距为D的字母对D-pairs,且这些D-pairs都是独一无二的,那么成字符串s是一个D-unique串D的取值范围为0~s.len()-2。然后这个用map的键值对来标记结果检测时更为方便。当然C的flag标记方式也可以,总的来说在大神看来是道简单的poj题目。
souce_code:
/* * ===================================================================================== * * Filename: surprising_string.cpp * Version: 1.0 * Created: 2013年10月13日 19时13分54秒 * Revision: none * Compiler: g++ * Author: szm * * ===================================================================================== */ #include <iostream> #include <string> #include <map> int main(int argc, char *argv[]){ std::string s; while(std::getline(std::cin,s) && (s.c_str())[0]!='*'){ if(s.size()<=2){ std::cout<<s.c_str()<<" is surprising."<<std::endl; continue; } bool flag_final=true; for(int i=0;i<=(s.size()-2);i++){ std::map<std::string,bool> mark; bool flag_unique=true; for(int j=0;j<=(s.size()-i-2);j++){ char m_pair[3]={(s.c_str())[j],(s.c_str())[j+1+i],'\0'}; std::string str(m_pair); if(!mark[str]) mark[str]=true; else{ flag_unique=false; break; } } if(!flag_unique){ flag_final=false; break; } mark.clear(); } if(flag_final) std::cout<<s<<" is surprising !"<<std::endl; else std::cout<<s<<" is not surprising !"<<std::endl; } return 0; }
相关文章推荐
- Surprising Strings POJ 3096 (暴力+map)
- POJ 3096 Surprising Strings(STL map string set vector)
- Surprising Strings poj 3096 map的运用
- DP<背包?> POJ 1015
- POJ 1419 Graph Coloring 最大独立点集->最大团 搜索
- POJ 2299 Ultra QuickSort <树状数组+离散化 / 归并排序>
- android json转换成List<Map>优化
- [ACM] POJ 3096 Surprising Strings (map使用)
- poj 3096 Surprising Strings
- mybatis list<map>作为参数 foreach循环
- nyoj 163 Phone List && poj 3630 Phone List <字典树 动态建树&&静态建树>
- List<Map>去重
- POJ 3692 Kindergarten 最大团->最大独立集
- POJ 3096 && HDU 2736 Surprising Strings(水~)
- POJ 3278 Catch That Cow <BFS>
- (用树结构支持并查集8.2.2)POJ 1988 Cube Stacking(并查集的使用:判断一个集合中元素的个数---->>某一个元素的下面还有多少个元素)
- poj 3370 Halloween treats 解题报告 <鸽巢原理>
- [POJ] 1006 -> 生理周期
- POJ 3252 Round Numbers <数位dp(记忆化所搜)/组合数学>
- <a><abbr><adress><map>