字符串BNUOJ 52781 Book Borders

Posted shulin~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串BNUOJ 52781 Book Borders相关的知识,希望对你有一定的参考价值。

https://www.bnuoj.com/v3/problem_show.php?pid=52781

【AC】

技术分享
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int maxn=5e5+3;
 5 char str[maxn];
 6 int l;
 7 int a[maxn];
 8 int b[maxn];
 9 int n,m;
10 void init()
11 {
12     memset(a,-1,sizeof(a));
13     memset(b,-1,sizeof(b));
14     int len=0;
15     for(int i=0;i<l;i++)
16     {
17         if(str[i]== )
18         {
19             b[i-1]=i-len;
20             a[i-1]=len;
21             len=0;
22         }
23         else
24         {
25             len++;
26         }
27     }
28     if(len)
29     {
30         b[l-1]=l-len;
31         a[l-1]=len;
32     }
33     for(int i=l-1;i>=0;i--)
34     {
35         if(b[i]==-1)
36         {
37             b[i]=b[i+1];
38         }
39     }
40     for(int i=l-1;i>=0;i--)
41     {
42         if(a[i]==-1)
43         {
44             a[i]=a[i+1];
45         }
46     }
47 }
48 
49 int solve(int x)
50 {
51     int ans=0;
52     int cur=0;
53     while(cur<l)
54     {
55         ans+=a[cur]+1;    
56         if(cur+x>=l) break;
57         cur=b[cur+x];
58     }    
59     return ans-1;
60 }
61 int main()
62 {
63     gets(str); 
64     l=strlen(str);
65     scanf("%d%d",&n,&m);
66     init();
67     for(int i=n;i<=m;i++)
68     {
69         int ans=solve(i);
70         printf("%d\n",ans);
71     }
72     return 0;
73 }
View Code

 

以上是关于字符串BNUOJ 52781 Book Borders的主要内容,如果未能解决你的问题,请参考以下文章

BNUOJ19500 Matrix Decompressing

C1. 组队活动 Small(BNUOJ)

A1. 道路修建 Small(BNUOJ)

BNUOJ 33535 Final Exam Arrangement

BNUOJ 52517 Another Server

BNUOJ34980方(芳)格(哥)取数(好坑)