CF 1981 C Turtle and an Incomplete Sequence(*1800) 构造
CF 1981 C Turtle and an Incomplete Sequence(*1800) 构造
题意:
给定一个长度为
思路:
首先,容易发现每个连续的
如果序列
不妨令区间左端点值为
一直除2即可,如果当前位为
现在考虑中间段的情况。我们只需要将较大值进行同样的处理即可,不断缩小区间范围。最后判断是否满足题意即可。
代码:
void Showball(){
int n;
cin>>n;
vector<int> a(n);
for(int i=0;i<n;i++) cin>>a[i];
if(count(all(a),-1)==n){
for(int i=0;i<n;i++) a[i]=i%2+1;
}else{
for(int i=0,j=-1;i<=n;i++){
if(i==n||~a[i]){
if(j==-1){//首段
for(int k=i-1;k>=0;k--){
a[k]=a[k+1]==1?2:a[k+1]/2;
}
}else if(i==n){//尾段
for(int k=j+1;k<n;k++){
a[k]=a[k-1]==1?2:a[k-1]/2;
}
}else{//中间段
int l=j,r=i;
while(l+1<r){
if(a[l]>a[r]){
a[l+1]=a[l]==1?2:a[l]/2;
l++;
}else{
a[r-1]=a[r]==1?2:a[r]/2;
r--;
}
}
if(a[l]!=a[r]/2&&a[r]!=a[l]/2){
return cout<<"-1\n",void();
}
}
j=i;
}
}
}
for(int i=0;i<n;i++) cout<<a[i]<<" \n"[i==n-1];
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Deepseek官网太卡,教你白嫖阿里云的Deepseek-R1满血版
· 2分钟学会 DeepSeek API,竟然比官方更好用!
· .NET 使用 DeepSeek R1 开发智能 AI 客户端
· DeepSeek本地性能调优
· 一文掌握DeepSeek本地部署+Page Assist浏览器插件+C#接口调用+局域网访问!全攻略