P16112 「o.OI R-1」青蛙平衡树

笔记

P16112 「o.OI R-1」青蛙平衡树 一个或两个点是一定中心对称的,所以先特判掉这种情况。 对于一般情况,先尝试能不能只在一维上做。 不难发现直线上连续的点一定是中心对称的,所以第一个点直接输出 (1,1),后面要是保持中心对称,就继续向右把线延长就行了。 对于不对称的点,直接空一个输出。接下来要是要保证中心对称,就返回来把这个空补上;要是接下来还要保证不对称,就向左延长之前那个线段。 代码: C++ #include using namespace std; #define int long long const int N=2e5+5; int n,x=0,l=1,r=1; int a[N]; signed main(){ ios::sync_with_stdio(0); cin.tie(0),cout.tie(0); cin>>n; for(int i=1;i>a[i]; if(a[1]==0||(n>1&&a[2]==0)) {cout `#include using namespace std; #define int long long const int N=2e5+5; int n,x=0,l=1,r=1; int a[N]; signed main(){ ios::sync_with_stdio(0); cin.tie(0),cout.tie(0); cin>>n; for(int i=1;in;i++) cin>>a[i]; if(a[1]==0||(n>1&&a[2]==0)) {cout"No";return 0;} cout"Yes\n1 0\n"; for(int i=2;in;i++){ if(a[i]&&x) coutx" 0\n",x=0; else if(a[i]&&!x) coutr" 0\n"; else if(!a[i]&&x) coutl" 0\n"; else if(!a[i]&&!x) cout(r+=2)" 0\n",x=r-1; } return 0; }`

Read more · Journal