NWERC 2017 Problem J. Juggling Troupe (规律+STL)

标签: 2017 NWERC 思维 set 规律
22人阅读 评论(0) 收藏 举报
分类:

 Juggling Troupe

时间限制: 3 Sec  内存限制: 128 MB
提交: 39  解决: 8
[提交][状态][讨论版][命题人:admin]

题目描述

At the national centre for computing and advanced circus skills, technical demonstrations by students are strongly encouraged.
A troupe of n novice performers are at this very moment arrayed in a row attempting to put on a juggling show. Unfortunately, none of them are very confident in their craft, and they are struggling. Thus, as soon as an opportunity presents itself, they will try to reduce their part in the performance to make the task easier.
Whenever a juggler has more than one ball in their possession, they will throw one ball to each of their neighbours. In the case that a juggler does not have a neighbour in some direction, they will simply throw the ball offstage instead. Everybody throws their juggling balls simultaneously. The show ends when no juggler has more than one ball.
As a member of the audience, you are not impressed by this performance. However, you do wonder how many balls each of the jugglers will have left at the end of the show.

输入

The input consists of:
• One line with a string s of length n (1 ≤ n ≤ 106 ) over the characters 0, 1 and 2. The ith character in s represents the number of juggling balls initially held by the ith person.

输出

Output a string s of length n over the characters 0 and 1, the ith giving the number of juggling balls the ith person has at the end of the show.

样例输入

12100212

样例输出

10111111

提示

来源


【题意】

    根据图片 我们可以 看到 实例的 模拟运行操作;

    气球数大于 2  向左右 分,  分到边界后 就消失, 当没有大于2 存在时 结束,并输出

【思路】

    我们可以试着写一写, 发现 对于一个单独的2  一定会 分到左右两边0 的位置 L,R 变成1, 

    并且 L+R -i 的位置 变成 0,

    于是我们可以把 0 的坐标 用STL  set  存储起来, 自动排序 并调用 lower_bound 函数 在logn 级别内

    查找位置2 的左右两边0的位置,   在0-n 内 更新0的坐标,

    最后肯定都是1  然后 把set 里的 对应位置赋值为 0  就 ok了

【注意】

    @彬子哥 提醒道 对于 set 里 iterator 指针 要放到 函数里面, 随用随调用, 不要放在 全局,不然会超时,

    然 我实现的时候 竟然神奇的 没有超时, 并且 在外面要比里面快一些.。。 尴尬

    

 上面定义在外面, 下面定义在里面 

【code】 

/*
* Date:4/15/2018
* Tile: 2017 NWERC J:Juggling Troupe
* Categery: 思维,规律, STL
* Attention: 注意超时问题
*
*/
#include <iostream>
#include <bits/stdc++.h>
typedef long long ll;

const int MAXN=1e6+7;

using namespace std;

typedef set<int>::iterator It;
set<int>T;

char str[MAXN];
int main()
{
    scanf("%s",str+1);
    int len=strlen(str+1);
    T.insert(0);
    T.insert(len+1);
    for(int i=1;i<=len;i++)
        if(str[i]=='0')
            T.insert(i);

    for(int i=1;i<=len;i++)
    {
        if(str[i]=='2')
        {
            set<int>::iterator L,R;
            R=T.lower_bound(i);
            L=R;
            L--;
            int x= *R+*L - i;
            if(*L>0)
                T.erase(L);
            if(*R<=len)
                T.erase(R);
            T.insert(x);
        }
    }
    for(int i=1;i<=len;i++) str[i]='1';
    for(It it=T.begin();it!=T.end();it++)
        str[*it]='0';
    for(int i=1;i<=len;i++)
        putchar(str[i]);
    cout<<endl;
    return 0;
}

123  

查看评论

STL模板编程

模板是一种能够产生代码的代码. 它能够节省我们的代码量.熟悉使用可以提高开发效率。
  • 2017年12月30日 22:27

[启发式分裂] BZOJ5200 [NWERC2017]Factor-Free Tree

当找到一个根的时候会把区间分成两个部分,然后递归做 问题就是怎么找根了 可以用bzoj4059那种思路,大概叫启发式分裂吧 对每个数,可以预处理一下在它左边第一个与他不互质的数和在它右边第一个与...
  • Coldef
  • Coldef
  • 2018-03-07 08:28:27
  • 164

TOJ 4354 HDU 4262 Juggler / 树状数组

Juggler 时间限制(普通/Java):1000MS/3000MS     运行内存限制:65536KByte   描述 As part of my magical juggling a...
  • u011686226
  • u011686226
  • 2013-11-10 11:25:39
  • 952

Starling 改变Juggler播放速度

我们在项目中需要实现快速或者慢速播放 原来的Starling并不支持【变频播放】 做了个简单的Juggler 来实现 废话不说 直接上代码 package xxxxx.core ...
  • babety
  • babety
  • 2013-11-27 19:28:09
  • 877

NWERC 2017 :Installing Apps (01背包DP + 思维+ 贪心)

Installing Apps时间限制: 2 Sec  内存限制: 128 MB提交: 170  解决: 24[提交][状态][讨论版][命题人:admin]题目描述Sandra recently b...
  • sizaif
  • sizaif
  • 2018-04-16 18:37:13
  • 66

问题 J: Juggling Troupe

问题 J: Juggling Troupe时间限制: 3 Sec  内存限制: 128 MB题目描述At the national centre for computing and advanced ...
  • MM__1997
  • MM__1997
  • 2018-04-16 17:47:09
  • 9

2012-2013 Northwestern European Regional Contest (NWERC 2012)【solved:6 / 11】

有一个大家都会的D。 emmm。我不会 但是!队友会呀2333先放放 -update:2017年10月16日20:49:39...
  • qq_29556211
  • qq_29556211
  • 2017-09-01 14:44:39
  • 166

ccpc2017杭州 J Master of GCD

题意:给你一个长度为n的全一数组s[n],进行m次操作,每次操作是在区间[l,r]中的所有a[i]乘x(x是2 or 3)。求s[n]的最大公约数。题解:如果直接n*m的话复杂度太高,所以需要优化,每...
  • Endeavor_jianjian
  • Endeavor_jianjian
  • 2018-04-17 11:19:15
  • 42

I - Identifying Map Tiles 2015-2016 Northwestern European Regional Contest (NWERC 2015)

题意: 给出一个map,询问对应点的坐标 思路: 找规律可得。x*2 + z   y*2+z 对于每个0 1  2 3  分情况讨论 #include #include #incl...
  • qq_33951440
  • qq_33951440
  • 2017-10-09 12:21:12
  • 140

2013-2014 Northwestern European Regional Contest (NWERC 2013)

http://codeforces.com/gym/100405/ 补题: A 已知一个图的点数为n,且改图为连通图。告诉了每两个点之间的最短路的距离。让你构造这个图,且这个图的边数为n。 I...
  • Codeblocksm
  • Codeblocksm
  • 2016-09-07 21:31:08
  • 361
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 7万+
    积分: 3301
    排名: 1万+
    博客专栏
    最新评论