cout << p[i] << " \n"[i == n - 1] 表示只有在i == n - 1才輸出\n否則輸出空格
#include<iostream>#include<unordered_map>#include<algorithm>#include<vector>#definepbpush_back#definefifirst;#definesesecond;usingnamespace std;voidsolve(){int n, a, b;cin >> n >> a >> b;vector<int> p{a};for(int i = n; i >=1; i --){if(i == a || i == b)continue;p.pb(i);}p.pb(b);if(*min_element(p.begin(), p.begin()+ n /2)== a &&*max_element(p.begin()+ n /2, p.end())== b){for(int i =0; i < n; i ++)cout << p[i]<<" \n"[i == n -1];}else{cout <<-1<< endl;}}intmain(){ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);int _ =1;cin >> _;while(_ --){solve();}return0;}
思路二 :
就en構造,發現這個做法太累贅了,比賽的時候邊界還卡了很久
算邊界的時候,忘記減去邊界中的另一個空點了
#include<iostream>#include<unordered_map>#include<vector>#definepbpush_back#definefifirst;#definesesecond;usingnamespace std;voidsolve(){int n, a, b;cin >> n >> a >> b;if(a > b){if(b != n /2|| n - a +1!= n /2){cout <<-1<< endl;return;}for(int i = a; i <= n; i ++) cout << i <<' ';for(int i =1; i <= b; i ++) cout << i <<' ';cout << endl;}else{if(n - a < n /2|| b -1< n /2){cout <<-1<< endl;return;}for(int i = a; i <= a - n /2+ b -1; i ++) cout << i <<' ';for(int i = b +1; i <= n; i ++) cout << i <<' ';for(int i =1; i <= a -1; i ++) cout << i <<' ';for(int i = a - n /2+ b; i <= b; i ++) cout << i <<' ';cout << endl;}}intmain(){ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);int _ =1;cin >> _;while(_ --){solve();}return0;}