Regionals 2015 >> Europe - Central >>7325 - Book Borders【模拟】


Europe - Central >>7325 - Book Borders



题目链接:7325

题目大意:给你一个字符串(含空格),每行x个字符,将单词排列进去,单词不能断开,问每行第一个单词的长度时多少,注意加空格

题目思路:直接模拟。第一个for遍历[a,b],第二个大致为n/a。复杂度大概为nlogn。

开两个数组,v[i]记录i这个位置所属的单词开始位置,e[v[i]]记录第i个位置所属的单词的结束位置。

然后每次判断这一行结尾,所在位置。如果在两个单词中间,则将该单词视为下一行开始,否则将下一个单词视为下一行开始

计算单词长度只需要将e[v[i]] - v[i]即可。

v和e所表示的含义如下图

以下是代码:

#include <bits/stdc++.h>
#define mst(a) memset(a,0,sizeof (a))
#define FOR(i,n) for (int i = 0; i < n; i++)
#define INF 1e9
#define eps 1e-10
using namespace std;

typedef long long ll;
vector <int> vec;
int v[500005];
int e[500005];
int main(){
    string s;
    while(getline(cin,s))
    {
        int len = s.size();
        int ret = 1;
        for (int i = 0; i < len; i++)
        {
            if(s[i] == ‘ ‘)
            {
                e[ret] = i;
                ret = i + 2;
            }
            else v[i+1] = ret;
        }
        e[ret] = len;
        int a,b;
        scanf("%d%d",&a,&b);
        getchar();
        for (int i = a; i <= b; i++)
        {
            int ans = e[v[1]] - v[1] + 1;
            for (int f = i; f < len; )
            {
                if (s[f - 1] == ‘ ‘)
                {
                    ans += e[v[f + 1]] - v[f + 1] + 1;
                    f = v[f + 1] + i - 1;
                    ans++;
                    continue;
                }
                if (f >= v[f] && f < e[v[f]])  //在中间
                {
                    ans += e[v[f]] - v[f] + 1;
                    f = v[f] + i - 1;
                }
                else if (f == e[v[f]])  //在末尾
                {
                    ans += e[v[f + 2]] - v[f + 2] + 1;
                    f = v[f + 2] + i - 1;
                }
                ans++;
            }
            printf("%d\n",ans);
        }
    }
    return 0;
}

/*its a long way to the top if you wanna rock n roll*/
时间: 2024-09-30 16:04:12

Regionals 2015 >> Europe - Central >>7325 - Book Borders【模拟】的相关文章

Regionals 2015 &gt;&gt; Asia - Tehran &gt;&gt; 7530 - Cafebazaar【二分图最佳匹配】【KM】【最大费用流】

Regionals 2015 >> Asia - Tehran >> 7530 - Cafebazaar 题目链接:7530 题目大意:一个公司有n个开发者,有m个APP可开发.其中一些开发者必选,一些APP必选.已知每个开发者开发每个APP的收益,求最大收益.(每个开发者最多开发一个APP,每个APP最多一个人开发) 题目思路: 解法一:二分图最佳匹配(KM算法) 增加一些虚开发者和虚app,非必要app可以被虚开发者开发,收益为0,反过来非必要开发者可以开发虚app,收益为0.

Tecplot Chorus 2015 R2 Win64 &amp; Linux64 2CD CFD模拟分析

Tecplot Chorus 2015 R2 Win64 & Linux64 2CD CFD模拟分析Tecplot Chorus为工程师分析大量模拟数据提供了一个崭新的工具.Tecplot Chorus集成了元数据分析.后处理和模拟数据管理功能,方便 于加快工程决策的制定.在CFD研究中,Tecplot Chorus使工程师能更加简单地发现趋势和异常情况,同时洞察引起这些变化的潜在的流动现象.通过帮助工程师协作分析大量模拟数据,Tecplot Chorus将会有助于工程师更快地获得更加有信息的结

TECPLOT.CHORUS.2015.R2.WIN.LINUX.X64 CFD模拟分析

TECPLOT.CHORUS.2015.R2.WIN.LINUX.X64 CFD模拟分析Tecplot  Chorus为工程师分析大量模拟数据提供了一个崭新的工具.Tecplot Chorus集成了元数据分析.后处理和模拟数据管理功能,方便 于加快工程决策的制定.在CFD研究中,Tecplot Chorus使工程师能更加简单地发现趋势和异常情况,同时洞察引起这些变化的潜在的流动现象.通过帮助工程师协作分析大量模拟数据,Tecplot Chorus将会有助于工程师更快地获得更加有信息的结果. Si

c# JD快速搜索工具,2015分析JD搜索报文,模拟请求搜索数据,快速定位宝贝排行位置。

分析JD搜索报文 搜索关键字 女装 第二页,分2次加载. rt=1&stop=1&click=&psort=&page=3http://search.jd.com/Search?keyword=%E5%A5%B3%E8%A3%85&enc=utf-8#keyword=%E5%A5%B3%E8%A3%85&enc=utf-8&qrst=UNEXPAND&as=1&qk=title_key%2C%2C%E5%A5%B3%E8%A3%85&

hiho 编程之美2015资格赛(2月29日-模拟日期)

题目1 : 2月29日 时间限制:2000ms 单点时限:1000ms 内存限制:256MB 描述 给定两个日期,计算这两个日期之间有多少个2月29日(包括起始日期). 只有闰年有2月29日,满足以下一个条件的年份为闰年: 1. 年份能被4整除但不能被100整除 2. 年份能被400整除 输入 第一行为一个整数T,表示数据组数. 之后每组数据包含两行.每一行格式为"month day, year",表示一个日期.month为{"January", "Feb

UVALive 7325 Book Borders

题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=5347 ------------------------------------------------------------------------------------------------------------- 我们可以预处理除长度为L的区间能存下的从

Regionals 2015 &gt;&gt; Asia - Tehran &gt;&gt; 7527 - Funfair【贪心】【dp】

7527 - Funfair 题目链接:7527 题目大意:玩一个闯关游戏,初始为x元,总共有n关,自己选择k关,以及过关顺序.过第i关的时候,赢得概率为pi,赢了之后可获得ai元,输了的话,则输去li * x的钱.问如何选择关以及闯关顺序使得最后的金钱数期望最大. 题目思路:首先,需要将关排序,这样可以保证第i+1关一定在i关之后过,然后进行dp,第i关取或者不取. 排序方式: 我们可以知道,过第i关的时候 赢: (Ai + x) * Pi 输: (1 - Pi)(1 - Li) * x 相加

hdu5387(2015多校8)--Clock(模拟)

题目链接:点击打开链接 题目大意:给出一个时间,问在钟表上这个时间的时候.时针和分针的角度,时针和秒针的角度.分针和秒针的角度.假设不是整数以分数的形式输出. 假设依照最小的格来算,那么: 1s对于秒针来说走1格,分针走12/720格.时针走1/720格. 1m对于分针来说走一个,时针走60/720格. 1h对于时针来说走5格. 计算给出的时间中时针,分针.秒针走的格数,相减得到差,每一格代表6度. 注意 1.整数的情况,当中有0,180和其他情况 2.取余 3.输出的角度0 <= j <=

Buffcraft——ACM ICPC 2014–2015, NEERC, Northern Subregional Contest-B(模拟)

Input file: buffcraft.in Output file: buffcraft.out Time limit: 2 seconds Memory limit: 256 megabytes Brenda enjoys a new role-playing game Buffcraft. Shields, swords, books and other carry-on items do not affects character stats in Buffcraft. The on