当前位置: 代码迷 >> 综合 >> codeforces 1559C Mocha and Hiking
  详细解决方案

codeforces 1559C Mocha and Hiking

热度:41   发布时间:2023-12-02 23:10:55.0

链接:

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;
}