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

【最小表示法】BZOJ2882-工艺

时间:2016-08-14 19:19:49      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:

【题目大意】

求一个循环数列的最小表示法。

【思路】

最小表示法模板题。之前用SAM做的,MLE了hhhhh戳

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 using namespace std;
 6 const int MAXN=300000+50;
 7 int s[MAXN*2],n;
 8 
 9 void init()
10 {
11     scanf("%d",&n);
12     for (int i=0;i<n;i++)
13     {
14         scanf("%d",&s[i]);
15         s[i+n]=s[i];
16     } 
17 }
18 
19 void solve()
20 {
21     int i=0,j=1,k=0;
22     while (k<n)
23     {
24         int t=s[(i+k)%(2*n)]-s[(j+k)%(2*n)];//不要忘记了这里要mod
25         if (t==0) k++;
26         else
27         {
28             if (t>0) i+=k+1;
29                 else j+=k+1;
30             if (i==j) j++;
31             k=0;
32         }
33     }
34     for (int r=1,now=i;r<=k;r++,now=(now+1)%(2*n)) 
35     {
36         printf("%d",s[now]);
37         if (r!=k) printf(" ");
38     }
39 }
40 
41 int main()
42 {
43     init();
44     solve();
45     return 0;
46 }

 

【最小表示法】BZOJ2882-工艺

标签:

原文地址:http://www.cnblogs.com/iiyiyi/p/5770710.html

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