链接:
https://codeforces.com/problemset/problem/1559/C
题意:
有n+1个点,要求每个点都仅走一次,每个点之间均可以从i走到i+1,或当a[i]=0,可以从i走到n+1,当a[i]=1时,可以从n+1走到i。找到符合条件的结果。
本题直接如果n+1可以走到1,或n可以走到n+1,或中间有相邻的两点满足,i能走到n+1,n+1能走到i+1,以上三种情况,满足任意一种均可。
代码如下:
#include<iostream>
#include<vector>
#include<cmath>
#include<map>
#include<algorithm>
#include<string>
#include<string.h>
#include<random>
using namespace std;
int a[10003];
int main() {
int q;
cin >> q;
while (q--) {
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
bool f = false;
if (a[1]) {
f = true;
cout << n + 1;
for (int i = 1; i <= n; i++) {
cout << " " << i;
}
}
else if (!a[n]) {
f = true;
for (int i = 1; i <= n; i++) {
cout << i << " ";
}
cout << n + 1;
}
else {
int r, l;
for (int i = 1; i <= n-1; i++) {
if (!a[i] && a[i + 1]) {
f = true;
l = i;
r = i+1;
}
}
if (f) {
for (int i = 1; i <= l; i++) {
cout << i << " ";
}
cout << n + 1;
for (int i = r; i <= n; i++) {
cout << " " << i;
}
}
}
if (!f) {
cout << -1;
}
cout << endl;
}
return 0;
}
|