CF1970B2 Exact Neighbours (Medium) 题解
点这里前往游记。
下文中所有下标从
因为
对于后面的房子,可以考虑直接根据前面已经建好的房子进行建造。具体地,如果
放代码:
#include<bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(false);
int n; cin>>n;
vector<int> a(n),r(n),l(n);
for(auto &i:a)cin>>i;
if(!a[0]){ // B2 的特殊性质
cout<<"YES\n1 1"<<endl,r[0]=1;
for(int i=1;i<n;i++){
if(!a[i]){cout<<i+1<<" 1\n",r[i]=1,l[i]=i; continue;}
int x=a[i]-i;
if(x>=0)cout<<i+1<<' '<<(r[i]=x+1)<<endl;
else cout<<i+1<<' '<<(r[i]=r[l[i]=i-a[i]])<<endl;
} // 只需模拟上面的构造
for(int i:l)cout<<i+1<<' ';
cout<<endl;
}
return 0;
}