【字符串】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 }

时间: 2024-10-13 22:46:36

【字符串】BNUOJ 52781 Book Borders的相关文章

Regionals 2015 &gt;&gt; Europe - Central &gt;&gt;7325 - Book Borders【模拟】

Europe - Central >>7325 - Book Borders 题目链接:7325 题目大意:给你一个字符串(含空格),每行x个字符,将单词排列进去,单词不能断开,问每行第一个单词的长度时多少,注意加空格 题目思路:直接模拟.第一个for遍历[a,b],第二个大致为n/a.复杂度大概为nlogn. 开两个数组,v[i]记录i这个位置所属的单词开始位置,e[v[i]]记录第i个位置所属的单词的结束位置. 然后每次判断这一行结尾,所在位置.如果在两个单词中间,则将该单词视为下一行开始

【字符串+BFS】Problem 7. James Bond

https://www.bnuoj.com/v3/external/gym/101241.pdf [题意] 给定n个字符串,大小写敏感 定义一个操作:选择任意m个串首尾相连组成一个新串 问是否存在一个这样的串s,s可以由不同的串首尾相连得到 最多100个字符串,所有字符串的总长度不超过5000 [样例解释] aB5可以由a+B5得到,也可以由aB+5得到,所以输出YES [思路] 首先一定是在100个选择2个串a,b,a是b的前缀 然后a和b的前缀可以消去,我们想知道b剩下的右半部分是哪一个串的

BNUOJ 34985 Elegant String 2014北京邀请赛E题 动态规划 矩阵快速幂

Elegant String Time Limit: 1000msMemory Limit: 65536KB 64-bit integer IO format: %lld      Java class name: Main We define a kind of strings as elegant string: among all the substrings of an elegant string, none of them is a permutation of "0, 1,-, k

BNUOJ 7178 病毒侵袭持续中

病毒侵袭持续中 Time Limit: 1000ms Memory Limit: 32768KB This problem will be judged on HDU. Original ID: 306564-bit integer IO format: %I64d      Java class name: Main 小t非常感谢大家帮忙解决了他的上一个问题.然而病毒侵袭持续中.在小t的不懈努力下,他发现了网路中的“万恶之源”.这是一个庞大的病毒网站,他有着好多好多的病毒,但是这个网站包含的病

bnuoj 34985 Elegant String

题目链接:http://acm.bnu.edu.cn/bnuoj/problem_show.php?pid=34985 We define a kind of strings as elegant string: among all the substrings of an elegant string, none of them is a permutation of "0, 1,…, k". Let function(n, k) be the number of elegant s

条件、循环、函数定义、字符串操作练习

注意标准库的两种导入与使用方式,建议大家采用<库名>.<函数名>的方式. 对前面的代码进行优化,用for,while,if,def实现: 用循环画五角星 1 import turtle 2 3 turtle.fillcolor("red") 4 turtle.begin_fill() 5 for i in range(5): 6 turtle.forward(100) 7 turtle.right(144) 8 turtle.end_fill() 用循环画同心圆

sql常用格式化函数及字符串函数

一.常用格式化函数 1.日期转字符串 select to_char(current_timestamp, 'YYYY-MM-DD HH24:MI:SS') //2017-09-18 22:41:50 YYYY:年(4和更多位) MM:月份号(01-12) DD:一个月里的日(01-31) HH24:一天的小时数(00-23) MI:分钟(00-59) SS:秒(00-59) 2.字符串转日期 select to_date('2017-09-18','YYYY-MM-DD') //2017-09-

PHP 格式化字符串sprintf()

字符串函数 sprintf() 函数把格式化的字符串写入一个变量中 函数说明:sprintf(格式, 要转换的字符串)  参考PHP手册 返回: 格式化后的字符串 举例: 如:保留2位小数, $str = '99.9';echo sprintf('%01.2f', $str);结果为:99.90 echo round($str, 2); 结果为:99.9

js中字符串的替换

定义和用法 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串. 语法 stringObject.replace(regexp/substr,replacement)参数 描述 regexp/substr 必需.规定子字符串或要替换的模式的 RegExp 对象. 请注意,如果该值是一个字符串,则将它作为要检索的直接量文本模式,而不是首先被转换为 RegExp 对象. replacement 必需.一个字符串值.规定了替换文本或生成替换文本的函数. 返