题意:就是给你一个数字,然后把最后一个数字放到最前面去,经过几次变换后又回到原数字,问在这些数字中,比原数字小的,相等的,大的分别有多少个。比如341-->134-->413-->341,所以和原数字相比,比原数字小的有一个,相等的有一个,大的有一个。
/* 如果比较两个字符串,就比较第一位不一样的,那我们就需要找出所有字符串和已知字符串的前缀公共部分。 在已知字符串后面载copy一份,然后做exkmp就行了。 需要注意的是,相同字符串只能出现一次,所以先求一遍循环节。 有一篇关于exkmp的ppt:http://wenku.baidu.com/view/79992a90bed5b9f3f80f1c16.html?from=search*/#include#include #include #define N 200100using namespace std;int Next[N],cas;char T[N];void kmp(int m){ int i=0,j=-1; Next[i]=-1; while(i =p){ int j=(p-k+1>0)?p-k+1:0; while(k+j =len)num2++; else if(T[Next[i]]>T[i+Next[i]])num1++; else if(T[Next[i]]