POJ-3096

来源:互联网 发布:阿里云9.9半年学生机 编辑:程序博客网 时间:2024/06/06 01:58

Surprising Strings

Time Limit: 1000MS memory Limit: 65536K

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.


题目大意:
给定一个字符串,如果这个字符串按照间隔 d 取字符对的过程中,对于相同的d没有相同字符对是相同的。 那么这个字符串就是 d-unique的。
而如果这个字符串对于每一个di都是 di-unqiue的话,这个字符串就满足surprising的。
现在给你几个字符串,请你依次判断他们是不是surprising的。
解题思路:
首先如果字符串长度小于等于2的话,显然是满足的。只有长度超过了2,例如”AAA”,它就是不满足1-unique的,所以不是surprising的。但是它是2-unqiue的,因为它只有一个2-pairs的字符对“AA”。从中,我们也就知道,对于一个长度为n(n>2)的字符串,如果验证了3,4,… ,n-1 unique都满足的话就认为它是surprising的了。
小技巧
对于每一个字符对,可以将它记录为一个数。由于题目中确认输入中只包含大写字母,那么就可以把这个字符对看成一个两位数。
x = int(arr[j] - 'A') * 26 + int(arr[j + i] - 'A');
另外注意只要中间发现一个不满足,是可以跳出多层循环的。


源代码

#include<iostream>#include<stdio.h>#include<cstring>#include<vector>#include<algorithm>using namespace std;char  arr[80];int num;int main() {    int i, j,k,x,y;    bool flag;    scanf("%s", arr);    while (arr[0] != '*') {        flag = true;        num = strlen(arr);        if (num >2) {            for (i = 1; i < num && flag; i++) {                for (j = 0; j < num - i-1 && flag; j++) {                    x = int(arr[j] - 'A') * 26 + int(arr[j + i] - 'A');                    for (k = 1; k < num - j - i; k++) {                        y = int(arr[j + k] - 'A') * 26 + int(arr[j + k + i] - 'A');                        if (x == y) {                            flag = false;                            break;                        }                    }                }            }        }        if (flag) {            printf("%s is surprising.\n",arr);        }        else {            printf("%s is NOT surprising.\n", arr);        }        scanf("%s", arr);    }    return 0;}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 胆小自卑不自信怎么办 孩子爱挑衣服怎么办 厌学症的孩子怎么办 小孩太自死了怎么办 宝宝老是得肺炎怎么办 社保卡断档了怎么办 北京儿童怎么办医保卡 股票开户不用了怎么办 高中生玩游戏父母怎么办 高中生爱玩游戏怎么办 宝贝发烧不退烧怎么办 孩子行笔速度慢怎么办 孩子不会读英语怎么办 太注意小孩考试成绩怎么办 二年级成绩很差怎么办 班级差生应该怎么办 班级差生太多怎么办 初三孩子英语差怎么办 初三英语基础差怎么办 学生学习效率低怎么办 摔伤后皮下血肿怎么办 孩子学习效率低怎么办 很多作业没写完怎么办? 小学孩子成绩差怎么办 孩子脚上起水泡怎么办 小学一年级体育课哑铃怎么办 托福成绩失效后怎么办 去外国旅游不适应怎么办 一年级语文成绩差怎么办 一年级小孩成绩差怎么办 一年级小孩基础差怎么办 一年级小孩语文差怎么办 一年级小孩数学差怎么办 一年级小孩理解能力差怎么办 一年级小孩作文差怎么办 一年级小孩记忆力差怎么办 孩子的记忆力不好怎么办 孩子记忆力不好怎么办呢 小学三年级学生不听话怎么办 司法考试成绩单没打印怎么办 高一200分怎么办