【BZOJ5288】【HNOI2018】游戏(乱搞?)

18人阅读 评论(0) 收藏 举报
分类:

题面

BZOJ
洛谷

题面自己到洛谷上看把

题解

考场上乱搞拿到了90分,简直不敢相信。
回家把代码再交了一份直接就AC了???

O(n2)的做法应该很容易想
对于每个点作为起点,暴力向左右两侧拓展,
看看它能够到达的区间就行了。

考虑怎么优化一下,发现如果拓展的时候走到了一个已经拓展完的节点
那么一定能够到达这个点能够到达的左右位置
因此,直接沿着当前点能够到达的最远左右位置跳跃一下,
中间就不用计算了。

我们发现这样很容易卡成O(n2)
于是我们倒着做,防止出题人故意卡正着做的
然后我就考场90分?洛谷/BZOJ AC了??

因为代码是考场代码,所以特别丑陋

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<queue>
#include<set>
#include<map>
using namespace std;
#define ll long long
#define RG register
#define MAX 1001000
inline int read()
{
    int x=0,t=1;char ch=getchar();
    while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();
    if(ch=='-')t=-1,ch=getchar();
    while(ch>='0'&&ch<='9')x=x*10+ch-48,ch=getchar();
    return x*t;
}
int n,m,Q;
int L[MAX],R[MAX],K[MAX];
namespace Task1//20pts
{
    void Calc(int x)
    {
        int l=x,r=x,len=0;
        while(233)
        {
            len=r-l;
            while(l>1&&(!K[l-1]||(l<=K[l-1]&&K[l-1]<=r)))--l;
            while(r<n&&(!K[r]||(l<=K[r]&&K[r]<=r)))++r;
            if(r-l==len)break;
        }
        L[x]=l;R[x]=r;
    }
    void Solve()
    {
        for(int i=1;i<=n;++i)Calc(i);
        while(Q--)
        {
            int S=read(),T=read();
            if(L[S]<=T&&T<=R[S])puts("YES");
            else puts("NO");
        }
    }
}
namespace pf
{
    void Calc1(int x)
    {
        int l=x,r=x,len=0;
        while(233)
        {
            len=r-l;
            while(l>1&&(!K[l-1]||(l<=K[l-1]&&K[l-1]<=r)))r=max(r,L[l-1]),l=L[l-1];
            while(r<n&&(!K[r]||(l<=K[r]&&K[r]<=r)))++r;
            if(r-l==len)break;
        }
        L[x]=l;R[x]=r;
    }
    void Calc2(int x)
    {
        int l=x,r=x,len=0;
        while(233)
        {
            len=r-l;
            while(l>1&&(!K[l-1]||(l<=K[l-1]&&K[l-1]<=r)))
            {
                --l;
                //if(L[l])r=max(r,R[l]),l=L[l];
            }
            while(r<n&&(!K[r]||(l<=K[r]&&K[r]<=r)))l=min(l,R[r+1]),r=R[r+1];
            if(r-l==len)break;
        }
        L[x]=l;R[x]=r;
    }
    void Solve()
    {
        //for(int i=1;i<=n/2;++i)Calc1(i);
        for(int i=n;i>=1;--i)Calc2(i);
        while(Q--)
        {
            int S=read(),T=read();
            if(L[S]<=T&&T<=R[S])puts("YES");
            else puts("NO");
        }
    }
}

int main()
{
    //freopen("game.in","r",stdin);
    //freopen("game.out","w",stdout);
    n=read();m=read();Q=read();
    for(int i=1;i<=m;++i)
    {
        int x=read(),y=read();
        K[x]=y;
    }
    if(n<=1000)Task1::Solve();
    else pf::Solve();
    return 0;
}
查看评论

把图标存储在SHELL32.DLL

uses   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,shellapi,Dialogs; type   TFor...
  • laoli
  • laoli
  • 2002-08-20 09:17:00
  • 1786

[bzoj5288][Hnoi2018]游戏【模拟】

【题目链接】   https://www.lydsy.com/JudgeOnline/problem.php?id=5288   https://www.luogu.org/problemnew/...
  • D_Vanisher
  • D_Vanisher
  • 2018-04-19 21:51:46
  • 33

HNOI2018翻水记

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

HNOI2018游记

DAY0 CY:省选前带你们出去玩,去哪啊,用四个字回答我! 我们:(想要我们说“烈士公园”(学校门口),没门!)橘子洲头! 于是我们就去了橘子洲头…… 然后吹了一上午风…… 吹得我耳朵痛…...
  • litble
  • litble
  • 2018-04-15 21:47:10
  • 231

loj 2508. 「AHOI / HNOI2018」游戏

题意: 题解: 显然每个点能到达的范围是一段区间,假如能预处理出来,询问就很好办了。 首先将没有们的点缩在一起,考虑i-&amp;gt;i+1这一道门,假如钥匙在i前面,那么i+1就一定...
  • qq_36808030
  • qq_36808030
  • 2018-04-19 15:37:30
  • 48

记HNOI2018

day0颓完睡觉day1BL突然出货,好久没出了看完t1感觉是个神题,跳t2感觉可以推一推式子,待会再看,跳t3感觉暴力70,打打完t3看t2,推一推式子就出来了t1无脑打一个暴力t2打完线段树,发现...
  • tswdfop
  • tswdfop
  • 2018-04-15 19:40:09
  • 50

HNOI2018 总结

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

【BZOJ5286】【HNOI2018】转盘

【题目链接】点击打开链接【思路要点】首先有一个不是非常显然的结论,对于每个询问,一定有一种最优解是从某个点开始先等待一段时间,然后不停顿地走完一圈。关于这个结论的证明我们可以考虑我们现在有一个解的答案...
  • qq_39972971
  • qq_39972971
  • 2018-04-17 18:33:24
  • 100

HNOI2018题解(转盘暂缺)

道路简单的难以置信的树上dp,一度以为自己看错题了#include&amp;lt;bits/stdc++.h&amp;gt; #define N 20010 using namespace std; ...
  • qq_39387710
  • qq_39387710
  • 2018-04-17 14:51:59
  • 31

LibreOJ #2510.「HNOI2018」道路 树形dp

题意 分析 在考场上的时候以为这是神仙题,就没有太仔细想,结果这就是一道普及dp题。 设f[d,x,y]表示以d为根的子树,上面有x条公路,y条铁路时的最优翻修方案。 记忆化搜索一...
  • qq_33229466
  • qq_33229466
  • 2018-04-16 19:22:47
  • 52
    个人资料
    持之以恒
    等级:
    访问量: 4万+
    积分: 5945
    排名: 5376
    友情链接
    yyb In cnblogs
    如果您想评论之类的,不太建议在CSDN下评论
    您可以移步Cnblogs,我在那里也更加活跃
    在Cnblogs上也有我的更多的文章,包括游记等
    友链之类的我也都放到那边啦
    然后这边因为分类很麻烦,我已经放弃添加新的分类了
    所以,如果您想有更加的阅读效果,请移步我的Cnblogs
    CSDN我还在用主要是这里写MD有预览。。。
    所以,大家还是去我的Cnblogs上看把,orz