Submission #718874

#TimeUsernameProblemLanguageResultExecution timeMemory
718874edenoooWeird Numeral System (CCO21_day1problem2)C++17
8 / 25
27 ms26964 KiB
#include<bits/stdc++.h> using namespace std; #define INF 1234567890 #define ll long long #define SZ 80 bool rev; ll N; int K, Q, D, M; int A[5001], n[SZ]; bool suf[SZ+1]; vector<int> X[1000000]; int dp[SZ][10001]; int f(int i, int j) { if (i > 0 && suf[i] && j == 0) return true; if (i >= SZ) return false; int &ret = dp[i][j+5000]; if (ret != -1) return ret; ret = 0; // j+x = n[i] (mod K)인 x를 사용해야 한다. for(int x : X[((n[i]-j)%K+K)%K]) if (f(i+1, (j+x-n[i] >= 0 ? (j+x-n[i])/K : -((-(j+x-n[i])+K-1)/K)))) { ret = 1; break; } return ret; } void g(int i, int j) { if (i > 0 && suf[i] && j == 0) return; int &ret = dp[i][j+5000]; for(int x : X[((n[i]-j)%K+K)%K]) if (f(i+1, (j+x-n[i] >= 0 ? (j+x-n[i])/K : -((-(j+x-n[i])+K-1)/K)))) { g(i+1, (j+x-n[i] >= 0 ? (j+x-n[i])/K : -((-(j+x-n[i])+K-1)/K))); cout << (rev ? -x : x) << " \n"[i==0]; break; } } int main() { ios::sync_with_stdio(0); cin.tie(0); cin.exceptions(ios::badbit | ios::failbit); cin >> K >> Q >> D >> M; for(int i=1; i<=D; i++) { cin >> A[i]; } while(Q--) { // clear rev = false; for(int i=0; i<1000000; i++) X[i].clear(); memset(dp, -1, sizeof(dp)); cin >> N; if (N < 0) { rev = true; N = -N; for(int i=1; i<=D; i++) A[i] = -A[i]; } for(int i=0; i<SZ; i++) { n[i] = N % K; N /= K; } suf[SZ] = true; for(int i=SZ-1; i>=0; i--) suf[i] = suf[i+1] && (n[i] == 0); for(int i=1; i<=D; i++) X[(A[i]%K+K)%K].push_back(A[i]); if (!f(0, 0)) cout << "IMPOSSIBLE\n"; else g(0, 0); // 역추적 if (rev) for(int i=1; i<=D; i++) A[i] = -A[i]; } return 0; }

Compilation message (stderr)

Main.cpp: In function 'void g(int, int)':
Main.cpp:38:7: warning: unused variable 'ret' [-Wunused-variable]
   38 |  int &ret = dp[i][j+5000];
      |       ^~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...