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

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

时间:2016-08-05 23:10:04      阅读:303      评论:0      收藏:0      [点我收藏+]

标签:


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*/ 

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

标签:

原文地址:http://blog.csdn.net/loy_184548/article/details/52133067

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