码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 3746 Cyclic Nacklace

时间:2018-04-23 22:38:33      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:++   open   int   hdu   main   std   opened   gif   str   

题意:给你几组字符串,每组添加多少个字符能够构成循环.

题解:最小循环节,注意讨论的三种情况,题上刚好给了这三种情况(要是不给我这弱鸡又考虑不全了)

技术分享图片
 1 #include <iostream>
 2 #include <cstring>
 3 #include <string>
 4 #include <algorithm>
 5 using namespace std;
 6 
 7 char s[100100];
 8 int Next[100100];
 9 int Len;
10 
11 void GetNext()
12 {
13     int i = 0, j = Next[0] = -1;
14     while (i < Len)
15     {
16         if (j == -1 || s[i] == s[j])
17             Next[++i] = ++j;
18         else
19             j = Next[j];
20     }
21 }
22 
23 int main(void)
24 {
25     int T;
26     ios::sync_with_stdio(false);
27     cin >> T;
28     while (T--)
29     {
30         cin >> s;
31         Len = strlen(s);
32         GetNext();
33         int circle = Len - Next[Len];
34         if (!Next[Len])
35             cout << Len << endl;
36         else
37         {
38             int temp = Len % circle;
39             if (!temp)
40                 cout << 0 << endl;
41             else
42                 cout << circle - temp << endl;
43         }
44     }
45 
46     return 0;
47 }
View Code

 

HDU 3746 Cyclic Nacklace

标签:++   open   int   hdu   main   std   opened   gif   str   

原文地址:https://www.cnblogs.com/ducklu/p/8922032.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!