社区讨论

萌新求调qwq

AT_agc012_e[AGC012E] Camel and Oases参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@m5tewgho
此快照首次捕获于
2025/01/12 17:27
去年
此快照最后确认于
2025/11/04 11:42
4 个月前
查看原帖
rt。
CPP
#include<bits/stdc++.h>
using namespace std;
const int MAXN=200005;
int pos[MAXN];
int vv[25],cnt;
int n,V;
int segl[MAXN][25],segr[MAXN][25],ans[MAXN];
int dp[2][MAXN];
int main() {
    cin>>n>>V;
    for(int i=1;i<=n;i++)cin>>pos[i];
    int tmp=V; 
    while(tmp){
		tmp>>=1;
        vv[cnt]=tmp; 
		cnt++;
    }
	vv[cnt]=V;
    for(int i=0;i<=cnt;i++){
        int id=1;
        int tmp=0;
        for(int j=1;j<=n;j++){
            if(j==1||pos[j]-pos[j-1]>vv[i])segl[j][i]=j,tmp++;
            else segl[j][i]=segl[j-1][i];
        }
        for(int j=n;j>=1;j--){
            if(j==n||pos[j+1]-pos[j]>vv[i])segr[j][i]=j;
            else segr[j][i]=segr[j+1][i];
        }
        if(i==cnt&&tmp>=25){
        	for(int j=1;j<=n;j++)cout<<"Impossible\n";
        	return 0;
		}      
    }
    for(int i=0;i<(1<<cnt);i++)dp[1][i]=n+1;
    for(int i=0;i<(1<<cnt);i++){
        for(int j=0;j<=cnt;j++){
            if((1<<j)&i)continue;
            int new_state=i|(1<<j);
            dp[0][new_state]=max(dp[0][new_state],segr[dp[0][i]+1][j]);
            dp[1][new_state]=min(dp[1][new_state],segl[dp[1][i]-1][j]); 
        }
    }
    for(int i=1;i<=n;i++){
        bool flag=0;
        for(int j=0;j<(1<<cnt);j++){
            int state1=j,state2=((1<<cnt)-1)^j;
            if(dp[0][j]>=segl[i][cnt]-1&&dp[1][state2]<=segr[i][cnt]+1){
                flag=1;
                break;
            }
        }
        for(int j=i;j<=segr[i][cnt];j++)ans[j]=flag;
        i=segr[i][cnt];
    }
    for(int i=1;i<=n;i++)cout<<(ans[i]?"Possible":"Impossible")<<endl;
    return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...