Submission #1286985

#TimeUsernameProblemLanguageResultExecution timeMemory
1286985cowkimArt Collections (BOI22_art)C++20
100 / 100
695 ms464 KiB
#include <iostream>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <unordered_map>
#include <queue>
#include <string>
#include <math.h>
#include <cctype>
#include <cstdint>
#include <climits>
#include <iostream>
#include <algorithm>
#include <vector>
#include <set>
#include <map>
#include <unordered_map>
#include <queue>
#include <string>
#include <math.h>
#include <cctype>
#include <cstdint>
#include <climits>
#include <iomanip>
#include <vector>
#define ll long long
#define endl "\n"
using namespace std;
/**
 * returns how many complaints you will receive for this ordering of the art collections
 */
int publish(std::vector<int>);

/**
 * use this function when you have found the correct order of the art collections
 * You must call answer exactly once; your program will be automatically
 * terminated afterwards.
 */
void answer(std::vector<int>);

/**
 * implement this function
 */
// vector<int> actualperm;
// int publish(vector<int> perm){
//     cout << "? ";
//     for(auto num : perm){
//         cout << num << " ";
//     } 
//     cout << endl;
//     int ans = 0;
//     for(int i = 0; i<perm.size(); i++){
//         for(int j = 0; j < i; j++){
//             for(int z = actualperm.size()-1; actualperm[z] != perm[i]; z--){
//                 if(actualperm[z] == perm[j]){
//                     ans++;
//                     break;
//                 }
//             }
//         }
//     }
//     cout << ans << endl;
//     return ans;
// }
// void answer(vector<int> perm){
//     cout << "! ";
//     for(auto num : perm){
//         cout << num << " ";
//     } 
//     cout << endl;
// }
// 1 2 3 4 5 6 7
// 7 1 2 3 4 5 6
//1:6 + lessthen 7
//1:6 + morethen 7
//less - more
//less + more = n-1
//2*less = q + n-1
//less = (q + n-1)/2
void solve(int n){
    vector<int> permAns(n);
    for(int shift = 0; shift < n; shift++){
        vector<int> permutation(n);
        for(int i = 1; i<=n; i++){
            permutation[(i+shift-1)%n] = i;
        }
        permAns[shift] = publish(permutation);
    }
    vector<int> ans(n);
    for(int i = 1; i<= n; i++){
        //när den är sist = n - i
        //när den är först = (sist +1)%n = 0
        //cout << "solving " << i << endl;
        int lasti = n-i;
        int firsti = (lasti +1)%n;
        //cout << lasti << " " << firsti << endl;;
        int firstVal = permAns[firsti];
        int lastVal = permAns[lasti];
        //cout << lastVal << " " << firstVal << endl;
        int diff = lastVal - firstVal;
        //cout << diff << endl;
        int less = (diff + n-1)/2;
        //cout << "( " << diff << " + " << n-1 << " ) / 2" << endl;
        //cout << less << endl;
        ans[n-less-1] = i;
    }
    answer(ans);
}
// int main(){
//     int n;
//     cin >> n;
//     actualperm.resize(n);
//     for(int i = 0; i<n; i++){
//         cin >> actualperm[i];
//     }
//     solve(n);
// }
// 5 3 7 2 6 1 4
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...