제출 #685413

#제출 시각아이디문제언어결과실행 시간메모리
685413dranaya_dushaSecret Permutation (RMI19_permutation)C++17
0 / 100
0 ms208 KiB
#pragma GCC optimize ("Ofast") #include <bits/stdc++.h> ////#define int long long //#define mp make_pair //#define pb push_back //#define fi first //#define se second //#define pii pair <int, int> #include "permutation.h" using namespace std; vector<int> ans; bool check (vector<int> &q, vector<int> &v, int p, int n) { ans.assign(n, 0); vector<int> used(n+1); ans[v[p]]=1; used[1]=1; for (int i=p; i<n-1; i++) if (ans[v[i]-1]+q[i]<=n && !used[ans[v[i]-1]+q[i]]){ ans[v[i+1]-1]=ans[v[i]-1]+q[i]; used[ans[v[i]-1]+q[i]]=1; } else if (ans[v[i]-1]-q[i]>0 && !used[ans[v[i]-1]-q[i]]) { ans[v[i+1]-1]=ans[v[i]-1]-q[i]; used[ans[v[i]-1]-q[i]]=1; } else return false; for (int i=p; i>0; i--) { if (ans[v[i]-1]+q[i-1]<=n && !used[ans[v[i]-1]+q[i-1]]){ ans[v[i-1]-1]=ans[v[i]-1]+q[i-1]; used[ans[v[i]-1]+q[i-1]]=1; } else if (ans[v[i]-1]-q[i-1]>0 && !used[ans[v[i]-1]-q[i-1]]) { ans[v[i-1]-1]=ans[v[i]-1]-q[i-1]; used[ans[v[i]-1]-q[i-1]]=1; } else return false; } return true; } // //void check2(vector<int>&q, vector<int> &v, int n) //{ // vector<int> v2; // for (int i=1; i<=n; i++) // v2.push_back(i); // vector<int> a(n); // for (int i=1; i<=n; i++) // a[i-1]=i; // random_shuffle(v2.begin(), v2.end()); // int res=query(v2); // do // { // // bool mark = 1; // for (int i=0; i<n-1; i++) // if (abs(a[i]-a[i+1])!=q[i]) mark = 0; // if (abs(a[n-1]-a[0])!=q[n-1]) mark=0; // if (mark){ // ans = a; // return; // } // }while (next_permutation(a.begin(), a.end())); //} void solve(int n) { vector<int> v; for (int i=1; i<=n; i++) v.push_back(i); srand(time(NULL)); random_shuffle(v.begin(), v.end()); vector<int> q(n); for(int i=0;i<n;i++){ rotate(v.begin(),v.begin()+1,v.end()); q[i] = query(v); } // for (int i=0; i<n; i++) // cout << q[i] << ' '; rotate(v.begin(),v.begin()+1,v.end()); int sum=0; for(int i=0;i<n;i++){ sum+=q[i]; } sum/=(n-1); for(int i=0;i<n;i++) q[i]=(sum-q[i]); rotate(q.begin(),q.begin()+1,q.end()); // for (int i=0; i<n; i++) // cout << q[i] << ' '; // cout << endl; // for (int i=0; i<n; i++) // cout << v[i] << ' '; // cout << endl; ans.assign(n, 0); //check2(q,v, n); for (int i=0; i<n; i++) if (check(q,v, i, n)) break; // for (int i=0; i<n; i++) // cout << ans[i] <<' '; answer(ans); }

컴파일 시 표준 에러 (stderr) 메시지

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]
   15 |   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]
   48 |   fscanf(stdin, "%d", &N);
      |   ~~~~~~^~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...