UVA1328 Period & SP263 PERIOD - Period

深藏阁楼爱情的钟 2023-06-02 11:58 139阅读 0赞

UVA1328 Period
对于每一个前缀\(i\),\(i-next_i\)即为最小循环节.证明在上一篇里.
这里要判断整除,否则就不行.
(代码可能有点不同,因为这题双倍经验,两道题输入不尽相同)
\(Code:\)

  1. #include <algorithm> #include <iostream> #include <cstdlib> #include <cstring> #include <cstdio> #include <string> #include <vector> #include <queue> #include <cmath> #include <ctime> #include <map> #include <set> #define MEM(x,y) memset ( x , y , sizeof ( x ) ) #define rep(i,a,b) for (int i = a ; i <= b ; ++ i) #define per(i,a,b) for (int i = a ; i >= b ; -- i) #define pii pair < int , int > #define X first #define Y second #define rint read<int> #define int long long #define pb push_back using std::set ; using std::pair ; using std::max ; using std::min ; using std::priority_queue ; using std::vector ; using std::swap ; using std::sort ; using std::unique ; using std::greater ; template < class T > inline T read () { T x = 0 , f = 1 ; char ch = getchar () ; while ( ch < '0' || ch > '9' ) { if ( ch == '-' ) f = - 1 ; ch = getchar () ; } while ( ch >= '0' && ch <= '9' ) { x = ( x << 3 ) + ( x << 1 ) + ( ch - 48 ) ; ch = getchar () ; } return f * x ; } const int N = 1e6 + 100 ; int n , nxt[N] , T , cnt ; char s[N] ; signed main (int argc , char * argv[]) { T = rint () ; while ( T -- ) { n = rint () ; if ( ! n ) break ; printf ("Test case #%lld\n" , ++ cnt ) ; MEM ( nxt , 0 ) ; scanf ("%s" , s + 1 ) ; int j = 0 ; rep ( i , 2 , n ) { while ( j && s[i] != s[j+1] ) j = nxt[j] ; if ( s[i] == s[j+1] ) ++ j ; nxt[i] = j ; } rep ( i , 2 , n ) { int j = nxt[i] ; if ( i % ( i - j ) ) continue ; if ( j ) printf ("%lld %lld\n" , i , i / ( i - j ) ) ; } putchar(10); } system ("pause") ; return 0 ; }

SP263 PERIOD - Period
双倍经验,除了输入一模一样.

转载于:https://www.cnblogs.com/Equinox-Flower/p/11480955.html

发表评论

表情:
评论列表 (有 0 条评论,139人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Period

    Period Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^\_^ 题目描述 For each prefix