답안 #259559

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
259559 2020-08-08T02:31:48 Z dantoh000 Secret Permutation (RMI19_permutation) C++14
컴파일 오류
0 ms 0 KB
#include <bits/stdc++.h>
//#include "permutationc.h"
using namespace std;

int n;
int Query(vector<int> q){
    int a[n];
    for (int i = 0; i < n; i++){
        a[i] = q[i];
    }
    return query(a);
}

int d[257];
int vis[257];
int P[257];
bool findperm(int id){
    if (id == n) return abs(P[n-1]-P[0]) == d[id];
    int last = P[id-1];
    int dif = d[id];
    //printf("%d: %d +- %d\n",id,last,dif);
    int cur = last+dif;
    if (cur >= 1 && cur <= n && !vis[cur]){
        P[id] = cur;
        vis[cur] = 1;
        if (findperm(id+1)) return true;
        vis[cur] = 0;
        P[id] = 0;
    }
    cur = last-dif;
    if (cur >= 1 && cur <= n && !vis[cur]){
        P[id] = cur;
        vis[cur] = 1;
        if (findperm(id+1)) return true;
        vis[cur] = 0;
        P[id] = 0;
    }
    return false;
}

void solve(int _N){
    n = _N;
    vector<int> q;
    for (int i = 1; i <= n; i++){
        q.push_back(i);
    }
    d[n] = Query(q);
    for (int j = n-1; j >= 1; j--){
        q.insert(q.begin(),q.back());
        q.pop_back();
        d[j] = Query(q);
    }
    int sum = 0;
    for (int i = 1; i <= n; i++){
        sum += d[i];
    }
    assert(sum % (n-1) == 0);
    sum /= n-1;
    for (int i = 1; i <= n; i++){
        d[i] = sum-d[i];
        //printf("%d ",d[i]);
        //assert(d[i] == abs(ans[i-1]-ans[i%N]));
    }
    //printf("\n");
    for (int i = 1; i <= n; i++){
        vis[i] = 1;
        P[0] = i;
        if (findperm(1)){
            for (int i = 0; i < n; i++){
                printf("%d ",P[i]);
            }
            int pos[n+1];
            for (int i = 0; i < n; i++){
                pos[P[i]] = i+1;
            }
            q.clear();
            for (int i = 1; i <= n; i++){
                q.push_back(pos[i]);
            }
            if (Query(q) != n-1){
                reverse(P,P+n);
            }
            answer(P);
            return;
        }
        vis[i] = 0;
    }
}

Compilation message

permutation.cpp: In function 'int Query(std::vector<int>)':
permutation.cpp:11:12: error: 'query' was not declared in this scope
     return query(a);
            ^~~~~
permutation.cpp:11:12: note: suggested alternative: 'Query'
     return query(a);
            ^~~~~
            Query
permutation.cpp: In function 'void solve(int)':
permutation.cpp:83:13: error: 'answer' was not declared in this scope
             answer(P);
             ^~~~~~
permutation.cpp:83:13: note: suggested alternative: 'assert'
             answer(P);
             ^~~~~~
             assert
stub.cpp: In function 'int query(int*)':
stub.cpp:15:9: warning: ignoring return value of 'int fscanf(FILE*, const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   fscanf(stdin, "%d", &x);
   ~~~~~~^~~~~~~~~~~~~~~~~
stub.cpp: In function 'int main(int, char**)':
stub.cpp:48:9: warning: ignoring return value of 'int fscanf(FILE*, const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   fscanf(stdin, "%d", &N);
   ~~~~~~^~~~~~~~~~~~~~~~~