51Nod-1347-旋转字符串
2016-05-14 18:25
211 查看
S[0…n-1]是一个长度为n的字符串,定义旋转函数Left(S)=S[1…n-1]+S[0].比如S=”abcd”,Left(S)=”bcda”.一个串是对串当且仅当这个串长度为偶数,前半段和后半段一样。比如”abcabc”是对串,”aabbcc”则不是。
现在问题是给定一个字符串,判断他是否可以由一个对串旋转任意次得到。
Input
第1行:给出一个字符串(字符串非空串,只包含小写字母,长度不超过1000000)
Output
对于每个测试用例,输出结果占一行,如果能,输出YES,否则输出NO。
Input示例
aa
ab
Output示例
YES
NO
一道有陷阱的问题,把一个原本很简单的问题给复杂化了,所以算得上是找规律题吧!
只要是对串,无论移动多少次都是对串,所以也就意味着,只要一开始不是对串,那么无论怎么移动都不会是对串。
代码很简单,如下(C):
现在问题是给定一个字符串,判断他是否可以由一个对串旋转任意次得到。
Input
第1行:给出一个字符串(字符串非空串,只包含小写字母,长度不超过1000000)
Output
对于每个测试用例,输出结果占一行,如果能,输出YES,否则输出NO。
Input示例
aa
ab
Output示例
YES
NO
一道有陷阱的问题,把一个原本很简单的问题给复杂化了,所以算得上是找规律题吧!
只要是对串,无论移动多少次都是对串,所以也就意味着,只要一开始不是对串,那么无论怎么移动都不会是对串。
代码很简单,如下(C):
#include<stdio.h> #include<string.h> int main() { char a[1000001]; int i, l = 0, flag; while (~scanf("%s", a)) { flag = 1; l = (int)strlen(a); if(l % 2 != 0) { printf("No\n"); return 0; } for(i = 0; i < l / 2; i++) { if (a[i] != a[i + l / 2]) { flag = 0; break; } } if(flag) printf("Yes\n"); else printf("No\n"); } return 0; }
相关文章推荐
- wpa_supplicant 介绍 (译文)
- 简历精简
- 实现质量属性
- java多线程编程之Synchronized关键字详解
- 冒泡排序
- 常用Bat命令
- 两种求模m逆元的方法
- jquery tmpl 详解
- java并发与多线程API学习
- shell脚本学习02-第一章小结
- 【学生信息管理系统】之“实时错误‘91'"
- 把写好的Java类导出jar,在另外的项目引用
- VR虚拟现实技术学习资料
- Android APK反编译详解
- 最短路径问题
- WERTYU找不出不能输出空格的原因SSSSSSSSSSSSS
- CodeForces 599B A - Spongebob and Joke
- 快速幂~ 同一个数多次幂的取余优化计算
- 第五天作业
- 简单工厂设计模式