Submission #907381

# Submission time Handle Problem Language Result Execution time Memory
907381 2024-01-15T12:44:22 Z Tymond Permutation (APIO22_perm) C++17
100 / 100
12 ms 512 KB
#include <bits/stdc++.h>
//#include "perm.h"

using namespace std;
using ll = long long;
using ld = long double;

const ld INF = 1e9;

void zmien(vector<ld>& a){
	vector<ld> nasz = a;
	sort(nasz.begin(), nasz.end());
 
	for(int i = 0; i < (int)a.size(); i++){
		for(int j = 0; j < nasz.size(); j++){
			if(a[i] == nasz[j]){
				a[i] = j;
				break;
			}
		}
	}
}

vector<signed> construct_permutation(ll k){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);

	int aktBit = 64 - __builtin_clzll(k);

	vector<ld> ans;
	bool bylo = false;
	while(aktBit > 0){
		aktBit -= 2;
		if(aktBit == -1){
			//został jeden na końcu
			ans.push_back(INF);//n * 2
			if(k & 1){
				ans.push_back(-INF);//n + 1
			}
		}else{
			int kon = (k >> aktBit) & 3;

			if(ans.size() == 0){
				if(kon == 2){
					ans = {0};
				}else{
					ans = {1, 0};
					bylo = true;
				}
			}else{
				if(kon == 0){
					//n * 4
					ans.push_back(INF);
					ans.push_back(INF + 1);
				}else if(kon == 1){
					//n * 4 + 1
					ans.push_back(INF);
					ans.push_back(INF + 1);
					ans.push_back(-INF);
					bylo = true;
				}else if(kon == 2){
					//n * 4 + 2
					ans.push_back(INF);
					ans.push_back(-INF);
					ans.push_back(INF + 1);
					bylo = true;
				}else if(kon == 3){
					//4 * n + 3
					if(bylo){	
						ans.push_back(INF);
						ans.push_back(INF + 1);
						ans.push_back(1.5);
					}else{
						ans.push_back(INF);
						ans.push_back(-INF);
						ans.push_back(INF + 1);
						ans.push_back(-INF - 1);
						bylo = true;
					}
				}
			}
		}
		
		zmien(ans);
	}

	return vector<signed> (ans.begin(), ans.end());
}

Compilation message

perm.cpp: In function 'void zmien(std::vector<long double>&)':
perm.cpp:15:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<long double>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   15 |   for(int j = 0; j < nasz.size(); j++){
      |                  ~~^~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 0 ms 344 KB Output is correct
2 Correct 1 ms 348 KB Output is correct
3 Correct 1 ms 348 KB Output is correct
4 Correct 2 ms 512 KB Output is correct
5 Correct 5 ms 348 KB Output is correct
6 Correct 5 ms 348 KB Output is correct
7 Correct 8 ms 348 KB Output is correct
8 Correct 12 ms 500 KB Output is correct
9 Correct 6 ms 348 KB Output is correct
10 Correct 11 ms 348 KB Output is correct
11 Correct 11 ms 348 KB Output is correct
12 Correct 10 ms 348 KB Output is correct
13 Correct 12 ms 348 KB Output is correct