Codeforces Round #453 (Div. 2) C - Hashing Trees 构造

xiaoxiao2021-02-28  22

特殊同构树,,

根据规则,相邻的两层结点 同时大于一个结点就会有差异,

输出方案的时候 一种是把所有的结点放到上一层的一个结点上,,另一种是把一个拿出来放到上层的一个结点上,另外的放到上层的另外的结点上

#include<iostream> #include<algorithm> #include<iomanip> #include<cstdio> #include<cstdlib> #include<cstring> #include<string> #include<cmath> #include<set> #include<queue> #include<stack> #include<map> #define PI acos(-1.0) #define in freopen("in.txt", "r", stdin) #define out freopen("out.txt", "w", stdout) #define kuaidian ios::sync_with_stdio(0); using namespace std; typedef long long ll; typedef unsigned long long ull; const int maxn = 1e5 + 777, maxd = 1e8; const ll mod = 1e9 + 7; const int INF = 0x7f7f7f7f; int n; int a[maxn]; int main() { kuaidian; cin >> n; n++; int f = 0; for(int i = 1; i <= n; ++i) cin >> a[i]; for(int i = 2; i <= n; ++i) { if(a[i-1] > 1 && a[i] > 1) { f = 1; break; } } if(!f) { cout << "perfect" << endl; return 0; } else { cout << "ambiguous" << endl; int id = 1; cout << 0; for(int i = 2; i <= n; ++i) { for(int j = 0; j < a[i]; ++j) { cout << " " << id; } id += a[i]; } cout << endl; id = 1; cout << 0; for(int i = 2; i <= n; ++i) { if(a[i-1] > 1 && a[i] > 1) { cout << " " << id-1; for(int j = 1; j < a[i]; ++j) { cout << " " << id; } id += a[i]; } else { for(int j = 0; j < a[i]; ++j) { cout << " " << id; } id += a[i]; } } cout << endl; } return 0; }

转载请注明原文地址: https://www.6miu.com/read-2150042.html

最新回复(0)