社区讨论
萌新求调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 条回复,欢迎继续交流。
正在加载回复...