JZOJ 5658. 【HNOI2018D2T1】游戏

标签: 模拟
17人阅读 评论(0) 收藏 举报
分类:

Description

Description

Input

Input

Output

Output

Sample Input/Output

Sample Input/Output
Sample Input/Output

Data Constraint

Data Constraint

Hint

Hint

Solution

  • 听说这题很暴力……

  • 这里给出一个理论复杂度 O(N2) 的算法。(事实上O(N) 带大常数)

  • 对于一个点 i ,我们记录 l[i],r[i] 表示它最左最右能扩展到哪里。

  • 对于一个位置 i ,我们记录一个 f[i] ,表示点 ii+1 中间的门的位置,为 0 则没有门。

  • 初始值:l[i]=r[i]=i , f[x]=y

  • 如果两个点中间没有门,则它们能互相直接到达。

  • 即:若 f[i1]=0 ,则有:l[i]=l[i1]r[i] 同理。

  • 之后我们就开始暴力扩展 l[i],r[i]

  • 如果 l[i]f[l[i]1]r[i] ,说明 i 可以捡到钥匙并往左扩展,则:l[i]=l[l[i]1]

  • r[i] 也一样尝试往右扩展。

  • 若一整次尝试扩展都没有更新到,就说明已扩展完毕,可以退出了。

  • 最后对于一次询问 s,t ,若 l[s]tr[s] 即为“YES”,否则为“NO”。

Code

#include<cstdio>
#include<cctype>
using namespace std;
const int N=1e6+5;
int l[N],r[N],f[N];
inline int read()
{
    int X=0,w=0; char ch=0;
    while(!isdigit(ch)) w|=ch=='-',ch=getchar();
    while(isdigit(ch)) X=(X<<1)+(X<<3)+(ch^48),ch=getchar();
    return w?-X:X;
}
int main()
{
    freopen("game.in","r",stdin);
    freopen("game.out","w",stdout);
    int n=read(),m=read(),p=read();
    for(int i=1;i<=m;i++)
    {
        int x=read();
        f[x]=read();
    }
    for(int i=1;i<=n;i++) l[i]=r[i]=i;
    for(int i=2;i<=n;i++)
        if(!f[i-1]) l[i]=l[i-1];
    for(int i=n-1;i;i--)
        if(!f[i]) r[i]=r[i+1];
    while(true)
    {
        bool pd=false;
        for(int i=2;i<=n;i++)
            while(l[i]>1 && l[i]<=f[l[i]-1] && f[l[i]-1]<=r[i]) l[i]=l[l[i]-1],pd=true;
        for(int i=n-1;i;i--)
            while(r[i]<n && l[i]<=f[r[i]] && f[r[i]]<=r[i]) r[i]=r[r[i]+1],pd=true;
        if(!pd) break;
    }
    while(p--)
    {
        int s=read(),t=read();
        puts(l[s]<=t && t<=r[s]?"YES":"NO");
    }
    return 0;
}
查看评论

HNOI2018翻水记

day0 又一次来到了长沙南站。 毕竟不是自己省选所以感觉比较轻松,晚上爽快战斗一下就睡觉了。 day1 看完题后发现好像三题都不是很可做,于是就选择先去刚看起来最清真的t1。 搞来搞去...
  • qq_33229466
  • qq_33229466
  • 2018-04-15 18:50:49
  • 159

HNOI2018 总结

听说可以报名HNOI玩一玩,就去玩了一玩Day0HNOI的流程比较简单,也没有什么报道,就是两天早上考试,下午出成绩,好像讲题都没有。 所以Day0就以找晚餐为由出去走了几个小时Day1由于酒店里考...
  • u011056504
  • u011056504
  • 2018-04-16 11:00:14
  • 248

HNOI 2016 D2T1 序列 (sequence)

http://yuxj173.github.io/2016/04/18/hnoi2016/#more 考场上唯一想出来的题,结果TM莫队写错了。。。 不过题解似乎有更神的莫队做法(优化过的莫队?)...
  • nlj1999
  • nlj1999
  • 2016-04-18 15:55:40
  • 588

[JZOJ4918]最近公共祖先

题目大意给定一棵nn个节点的有根树,节点编号11到nn,根节点为11号点。每个节点要么是黑色要么是白色,并且有权值wiw_i,初始时所有节点都是白色的。现在总共有mm个操作,分以下两种: ∙\bul...
  • a_crazy_czy
  • a_crazy_czy
  • 2016-12-10 20:50:01
  • 942

【JZOJ4637】大鱼海棠

Description椿是掌管海棠花的少女,她所在的世界不为人们所知,他们的天空就是人类的海底。生活在那个世界里的他们不是人,也不是鱼,而是其他人,掌管着人间的规律。 按照他们的习俗,在16岁那年,...
  • sadnohappy
  • sadnohappy
  • 2016-07-17 21:32:57
  • 835

【JZOJ 4984】 太空飞船

Description Analysis这个数据范围很显然的要分段程序K=2两段越平均越好,直接O(n)扫一遍即可K=3三段越平均越好,我们枚举其中一个等分点,调整另一个等分点(这个可以通过指针移动...
  • lyd_7_29
  • lyd_7_29
  • 2017-02-27 19:56:38
  • 462

[JZOJ5037]【NOI2017模拟3.30】轮回

题目大意给你n个点,m条边的无向图,求长度为4的环的个数,环要保证4个点都不同。 n...
  • ZLTJohn
  • ZLTJohn
  • 2017-03-30 22:09:06
  • 394

【JZOJ 1517】背包问题(dp)

问题描述 从T组物品中选出一些物品,放入背包中,求剩余空间的最小值。 限制条件:从每组物品中挑选物品必须要选取连续的一段。就是说,如果这组物品共有n个: 物品1、物品2、物品3、…、物品n,那么只...
  • Fallen_Angel001
  • Fallen_Angel001
  • 2018-01-28 20:58:28
  • 35

[JZOJ4444]a

题目大意给定一棵nn个节点的树, 每个点ii有权值aia_i,1≤ai≤m 1\le a_i\le m。 有QQ个询问,对于询问(x,y,k)(x,y,k), 分别输出树上从xx到yy的路径中, 权...
  • a_crazy_czy
  • a_crazy_czy
  • 2016-04-22 21:53:51
  • 925

JZOJ.4605. 排序

二分+线段树
  • huangjingyuan107
  • huangjingyuan107
  • 2016-07-20 16:23:02
  • 229
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 18万+
    积分: 4759
    排名: 7677
    博客专栏
    最新评论