Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define f first
- #define s second
- #define pb push_back
- #define ar array
- #define all(x) x.begin(), x.end()
- #define siz(x) (int)x.size()
- #define FOR(x, y, z) for(int x = (y); x < (z); x++)
- #define ROF(x, z, y) for(int x = (y-1); x >= (z); x--)
- #define F0R(x, z) FOR(x, 0, z)
- #define R0F(x, z) ROF(x, 0, z)
- #define trav(x, y) for(auto&x:y)
- using ll = long long;
- using vi = vector<int>;
- using vl = vector<long long>;
- using pii = pair<int, int>;
- using vpii = vector<pair<int, int>>;
- template<class T> inline bool ckmin(T&a, T b) {return b < a ? a = b, 1 : 0;}
- template<class T> inline bool ckmax(T&a, T b) {return b > a ? a = b, 1 : 0;}
- mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
- const char nl = '\n';
- const int mxN = 2e5 + 10;
- const int MOD = 1e9 + 7;
- const long long infLL = 1e18;
- void solve(){
- int n, k;
- cin >> n >> k;
- k -= n-1;
- if(k>n*(n-1)/2||k<0){
- cout << "IMPOSSIBLE\n";
- return;
- }
- vi a(n, -1);
- F0R(i, n){
- if(k>n-i-1){
- if(i%2==0){
- a[n-(i/2)-1] = i;
- }
- else{
- a[i/2] = i;
- }
- k -= n-i-1;
- }
- else{
- if(i%2==0){
- a[n-(i/2)-1-((n-i-1)-k)] = i;
- }
- else{
- a[i/2+((n-i-1)-k)] = i;
- }
- int cnt = i+1;
- int SP = -1;
- bool seen = 0;
- if(i%2==0){
- F0R(j, n){
- if(a[j]!=-1&&!seen) SP = j;
- if(a[j]==-1) a[j] = cnt++, seen = 1;
- }
- reverse(a.begin()+SP+1, a.begin()+n-(i/2)-1-((n-i-1)-k));
- }
- else{
- SP = n;
- R0F(j, n){
- if(a[j]!=-1&&!seen) SP=j;
- if(a[j]==-1) a[j] = cnt++, seen = 1;
- }
- reverse(a.begin()+i/2+((n-i-1)-k)+1, a.begin()+SP);
- }
- k = 0;
- break;
- }
- }
- F0R(i, n){
- cout << a[i]+1 << ' ';
- }
- cout << nl;
- }
- int32_t main(){
- ios_base::sync_with_stdio(0); cin.tie(0);
- int t; cin >> t;
- F0R(i, t){
- cout << "Case #" << i+1 << ": ";
- solve();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment