POJ 3096 Surprising Strings
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 5081 | Accepted: 3336 |
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
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.
Source
定义D-pairs表示取字符串s中相距为D的两个字母所构成的字母对,该字母对中两个字母的位置顺序与他们在主串s中的位置顺序一致
定义D-unique表示,若从字符串s中取出所有相距为D的字母对D-pairs,且这些D-pairs都是独一无二的,那么成字符串s是一个D-unique串
D的取值范围为0~s.len()-2
假如字符串s对于所有的D都有D-unique成立,则字符串s是令人惊讶的 = =
#include<iostream>
#include<cstdio>
#include<cstring>
#include<map>
#include<string> using namespace std; char str[]; int main(){ //freopen("input.txt","r",stdin); map<string,int> mp;
while(~scanf("%s",str) && str[]!='*'){
int flag=;
int len=strlen(str);
//printf("str=%s\n",str);
string tmp;
int blank=;
for(int i=;i<len-blank && flag;i++){
tmp="";
mp.clear();
for(int i=;i<len-blank && flag;i++){
tmp=tmp+str[i]+str[i+blank];
//cout<<"-------- "<<tmp<<endl;
if(mp[tmp])
flag=;
mp[tmp]=;
tmp="";
}
blank++;
}
if(flag)
printf("%s is surprising.\n",str);
else
printf("%s is NOT surprising.\n",str);
}
return ;
}
最新文章
- 使用OAuth、Identity创建WebApi认证接口供客户端调用
- 解决At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this log
- Coding the Matrix (2):向量空间
- Linux 下配置多机实时同步
- Ensures there will be no &#39;console is undefined&#39; errors
- python调用c代码
- [百度百科]dir命令指定显示的排序方式
- 在Linux命令行中以图形化窗口打开文件夹
- codeforces721C
- Python笔记4——字典的一些基本操作
- gevent实现基于epoll和协程的服务器
- elastic search 重要的系统配置
- gcc/g++ disable warnings in particular include files
- Baidu WebFE(FEX)团队开发 的 文件上传插件 WebUploader
- kbmmw 的HTTPSmartService入门
- Vue文件跳转$router传参数
- golang 的精髓--pipeline流水线,对现实世界的完美模拟
- 线程8--GCD常见用法
- C语言学习记录_2019.02.06
- python基础学习1-网络爬虫程序中的代理IP设置
热门文章
- Redis自学笔记 --Hash、List、Set类型简述
- Qt5 for Android: incompatible ABI
- [Functional Programming] mapReduce over Async operations with first success prediction (fromNode, alt, mapReduce, maybeToAsync)
- 安全删除U盘或其他硬件 unlocker的使用方法
- Java 吸血鬼数字
- iOS 怎样更新APP
- 代码生成器的关键代码(读取PDM文件)
- 【转载】如何在Oracle中复制表结构和表数据
- 用node.js写的代码
- 文本框只支持数字、小数点、退格符、负号、Del键