首页 > 其他分享 >[AGC012E] Camel and Oases 题解

[AGC012E] Camel and Oases 题解

时间:2024-07-19 11:41:57浏览次数:15  
标签:AGC012E ch Oases 题解 fr long FF fl define

题目链接

题目链接

题目解法

可能并没有那么难(?

首先 \(V\) 的取值只有 \(\log V\) 种,即 \(\lfloor \frac{V}{2^k}\rfloor\)
称 \(\lfloor \frac{V}{2^k}\rfloor\) 为第 \(k\) 层,先预处理出每一层的极大连通区间
我们可以把问题抽象成:每一层中选一个区间,要求覆盖 \([1,n]\),且第 \(0\) 层的区间是固定的

我们不考虑第 \(0\) 层
因为层数比较少,所以考虑状压
令 \(fl_S\) 表示只考虑集合 \(S\) 中的层,能从头开始覆盖到的最远位置
同理定义 \(fr_S\)
转移是简单的

加上第 \(0\) 层,考虑枚举每一段计算结果
如果段数 \(>\log V\) 就无解

时间复杂度 \(O((V+n)\log V)\)

#include <bits/stdc++.h>
#define F(i,x,y) for(int i=(x);i<=(y);i++)
#define DF(i,x,y) for(int i=(x);i>=(y);i--)
#define ms(x,y) memset(x,y,sizeof(x))
#define SZ(x) (int)x.size()-1
#define all(x) x.begin(),x.end()
#define pb push_back
using namespace std;
typedef long long LL;
typedef unsigned long long ull;
typedef pair<int,int> pii;
template<typename T> void chkmax(T &x,T y){ x=max(x,y);}
template<typename T> void chkmin(T &x,T y){ x=min(x,y);}
template<typename T> void read(T &FF){
    FF=0;int RR=1;char ch=getchar();
    for(;!isdigit(ch);ch=getchar()) if(ch=='-') RR=-1;
    for(;isdigit(ch);ch=getchar()) FF=(FF<<1)+(FF<<3)+ch-48;
    FF*=RR;
}
const int N=200010,M=18,inf=1e9;
int n,V,x[N],lay[M];
int rngl[M][N],rngr[M][N],fl[1<<M],fr[1<<M];
bool ans[N];
int main(){
    read(n),read(V);
    F(i,1,n) read(x[i]);
    lay[0]=V/2;
    int mxd=0;
    while(lay[mxd]) mxd++,lay[mxd]=lay[mxd-1]/2;
    F(i,0,mxd)
        F(j,1,n){
            int k=j;
            while(k<n&&x[k+1]-x[k]<=lay[i]) k++;
            rngl[i][j]=k,rngr[i][k]=j,j=k;
        }
    int full=(1<<(mxd+1))-1;
    fl[0]=0;
    F(S,0,full)
        F(j,0,mxd) if(!(S>>j&1)&&rngl[j][fl[S]+1])
            chkmax(fl[S^1<<j],rngl[j][fl[S]+1]);
    F(S,0,full) fr[S]=inf;
    fr[0]=n+1;
    F(S,0,full) if(fr[S]!=inf)
        F(j,0,mxd) if(!(S>>j&1)&&rngr[j][fr[S]-1])
            chkmin(fr[S^1<<j],rngr[j][fr[S]-1]);
    int tot=0;
    F(i,1,n){
        int j=i;
        while(j<n&&x[j+1]-x[j]<=V) j++;
        tot++;
        if(tot>mxd+2){ F(i,1,n) ans[i]=0;break;}
        bool flg=0;
        F(S,0,full) if(fl[S]>=i-1&&fr[S^full]<=j+1){ flg=1;break;}
        if(flg) F(k,i,j) ans[k]=1;
        i=j;
    }
    F(i,1,n) if(ans[i]) puts("Possible");else puts("Impossible");
    return 0;
}

标签:AGC012E,ch,Oases,题解,fr,long,FF,fl,define
From: https://www.cnblogs.com/Farmer-djx/p/18311185

相关文章

  • 2061:【例1.2】梯形面积 题解
    题目描述在梯形中阴影部分面积是150平方厘米,求梯形面积。解题思路简单的数学题。三角形面积公式为\(S=\frac{ah}{2}\),反推可得\(h=\frac{2S}{a}\),将\(a=15cm\)和\(S=150cm^2\)代入公式\(h=\frac{2S}{a}\),解得\(h=20cm\),又由于\(h_{▲}=h_{梯形}\),所以\(h_{梯形}=h_{▲}=20c......
  • 2024牛客暑期多校训练营2 B.MST(题解)
    题意给一张\(n\)个点,\(m\)条边的无向图,\(q\)次询问,每次询问给\(k\)个结点,问这\(k\)个结点的诱导子图(也就是原图中抽出这些结点,以及原图中这些节点之间有的边)的最小生成树是多少,不连通输出-1,保证\(q\)次询问加起来问到的点的数量\(\sumk_i\leq10^5\)。思路......
  • 题解:CF1381A1 Prefix Flip (Easy Version)
    思路这道题直接用下一题的代码就行了\(C1\):注意到限制\(3n\)很大,于是看每一位是不是一样的,再操作,如样例一:转化第一位:\(01\to11\)。转化第二位:\(11\to00\to10\)。每次把当前位子提到第一位,然后翻转第一位,最后翻转回去,最多\(3n\)次,不用暴力操作直接计答案时间复杂度......
  • 牛客多校H题题解
    链接:[https://ac.nowcoder.com/acm/contest/81597/H]来源:牛客网题目描述Redstandsatthecoordinate\((0,0)\)oftheCartesiancoordinatesystem.Shehasastringofinstructions:up,down,left,right(where'right'increasesthex-coordinateby\(1......
  • 题解
    A-地毯标准的二维差分前缀和,定义\(s_{i,j}\)为当前格子的权值,然后根据题目模拟题意进行差分求和即可#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintN=1e3+10,mod=1e9+7;ints[N][N];signedmain(){std::ios::sync_with_......
  • 题解:2024牛客多校赛第二场 A Floor Tiles(思维)
    2024NowcoderMulti-UniversityTrainingContest2ProblemA.FloorTiles题目大意给你两种正方形图案,分别为以下两种:再给你三个整数\(N,M,K\),表示你需要用这两种图案,拼成一个\(N\)列\(M\)行的矩形。由于这两种图案十分特殊,他们能无缝衔接在一起。因此你需要让这个矩......
  • GESP编程能力等级认证C++编程真题解析 | 2024年3月五级
    学习C++从娃娃抓起!记录下CCF-GESP备考学习过程中的题目,记录每一个瞬间。附上汇总贴:GESP编程能力等级认证C++编程真题解析|汇总单选题第1题唯一分解定理描述的内容是()?A.任意整数都可以分解为素数的乘积B.每个合数都可以唯一分解为一系列素数的乘积C.两个不同的......
  • 题解:CF1912D Divisibility Test
    又是一道水绿。刚刚小学毕业的数学idiot——我释怀地笑了。第一种很好判断,当$b^k$为$n$的倍数时,取基数为$b$的能被$n$整除的整数$c$的最后$k$位数显然能被$n$整除。第二种也不难,当$b^k\equiv1\pmodn$时,取以$b$为底数的能被$n$整除的整数$c$的$k$......
  • Load balancer does not contain an instance for the service service-B [503] duri
    场景:service-A服务通过openFeign远程调用service-B服务的test()方法,结果报错Loadbalancerdoesnotcontainaninstancefortheserviceservice-Bfeign.FeignException$ServiceUnavailable:[503]during[POST]to[http://service-B/test]原因:报错信息的意思......
  • [题解]P1896互不侵犯
    数位DP模板题link题面[SCOI2005]互不侵犯题目描述在\(N\timesN\)的棋盘里面放\(K\)个国王,使他们互不攻击,共有多少种摆放方案。国王能攻击到它上下左右,以及左上左下右上右下八个方向上附近的各一个格子,共\(8\)个格子。输入格式只有一行,包含两个数\(N,K\)。输出格......