제출 #1116246

#제출 시각아이디문제언어결과실행 시간메모리
1116246KK_1729Nice sequence (IZhO18_sequence)C++17
76 / 100
2070 ms50084 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define FOR(i,a,b) for (int i = (a); i < (b); ++i) #define pb push_back #define all(a) a.begin(), a.end() #define endl "\n" void printVector(vector<int> a){ for (auto x: a) cout << x << " "; cout << endl; } vector<int> possible(int x, int n, int m){ vector<vector<int>> graph(x+1); // edge from i to j iff pref[i] < pref[j] vector<int> indeg(x+1); for (int i = m; i <= x; ++i){ graph[i-m].pb(i); indeg[i] = 1; } for (int i = n; i <= x; ++i){ graph[i].pb(i-n); indeg[i-n] = 1; } int val = 1; vector<int> visited(x+1); vector<int> prefix(x+1); FOR(i,0,x+1){ // cout << i << ": "; // printVector(graph[i]); } stack<int> s; FOR(i,0,x+1){ if (indeg[i] == 0){ s.push(i); // cout << i << endl; } } if (s.empty()){ return {}; } while (!s.empty()){ int current = s.top(); s.pop(); if (visited[current]){ return {}; } prefix[current] = val; val++; for (auto item: graph[current]){ s.push(item); } visited[current] = 1; } FOR(i,0,x+1){ if (!visited[i]) return {}; } return prefix; } void solve(){ int n, m; cin >> n >> m; int l = 0; int r = 1000000; vector<int> best; while (l < r){ int mid = (l+r)/2; if (l+1 == r){ if (!possible(r, n, m).empty()){ best = possible(r, n, m); }else{ best = possible(l, n, m); } break; } vector<int> o = possible(mid, n, m); // cout << l << r << mid << endl; if (!o.empty()){ // cout << mid << endl; l = mid; best = o; }else{ r = mid; } } // printVector(possible(7, 3, 6)); // printVector(best); cout << best.size()-1 << endl; FOR(i,1,best.size()) cout << best[i]-best[i-1] << " "; cout << endl; } int32_t main(){ ios::sync_with_stdio(false);cin.tie(nullptr); int t = 1; cin >> t; while (t--) solve(); }

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

sequence.cpp: In function 'void solve()':
sequence.cpp:5:40: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
    5 | #define FOR(i,a,b) for (int i = (a); i < (b); ++i)
      |                                        ^
sequence.cpp:93:5: note: in expansion of macro 'FOR'
   93 |     FOR(i,1,best.size()) cout << best[i]-best[i-1] << " ";
      |     ^~~
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...