Submission #633875

#TimeUsernameProblemLanguageResultExecution timeMemory
633875lovrotNice sequence (IZhO18_sequence)C++11
34 / 100
2081 ms5460 KiB
#include <bits/stdc++.h> #define pb push_back #define X first #define Y second #define pii pair<int, int> using namespace std; const int N = 2 * 1e5 + 10; int n, m, p[N], lastx = N - 1, g[N][2]; int stk[N], pos; int cyc[N], bio[N], ts[N], cookie; int stackTop(){ return stk[pos]; } void stackPop(){ pos--; } void stackPush(int x){ pos++; stk[pos] = x; p[x] = pos; } bool cycp(int u){ bio[u] = cookie; cyc[u] = cookie; // cout << u << "\n"; if(g[u][0] != -1){ if(cyc[g[u][0]] == cookie){ return true; } if(cycp(g[u][0])){ return true; } } if(g[u][1] != -1){ if(cyc[g[u][1]] == cookie){ return true; } if(cycp(g[u][1])){ return true; } } cyc[u] = -cookie; return false; } void topSort(int u){ ts[u] = cookie; if(g[u][0] != -1 && ts[g[u][0]] != cookie){ topSort(g[u][0]); } if(g[u][1] != -1 && !ts[g[u][1]] != cookie){ topSort(g[u][1]); } stackPush(u); } void output(int ans){ for(int i = 0; i <= ans; i++) if(ts[i] != cookie) topSort(i); printf("%d\n", ans); for(int i = 1; i <= ans; i++) printf("%d ", (p[i] - p[0]) - (p[i - 1] - p[0])); printf("\n"); } bool probaj(int x){ pos = -1; cookie++; for(int i = 0; i <= x; i++){ g[i][0] = g[i][1] = -1; if(i - m >= 0){ g[i][0] = i - m; } if(i - n >= 0){ g[i - n][1] = i; } } // for(int i = 0; i <= x; i++) cout << i << ": " << g[i][0] << " " << g[i][1] << "\n"; for(int i = 0; i <= x; i++){ if(bio[i] != cookie){ if(cycp(i)) return false; } } return true; } void task(){ cin >> n >> m; int lo = 0, hi = 2 * (n + m) + 1; while(hi - lo > 1){ int mi = (lo + hi) / 2; if(probaj(mi)) lo = mi; else hi = mi; } probaj(lo); output(lo); } int main() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); int t; cin >> t; while(t--){ task(); } return 0; }

Compilation message (stderr)

sequence.cpp: In function 'void topSort(int)':
sequence.cpp:59:35: warning: logical not is only applied to the left hand side of comparison [-Wlogical-not-parentheses]
   59 |  if(g[u][1] != -1 && !ts[g[u][1]] != cookie){
      |                                   ^~
sequence.cpp:59:22: note: add parentheses around left hand side expression to silence this warning
   59 |  if(g[u][1] != -1 && !ts[g[u][1]] != cookie){
      |                      ^~~~~~~~~~~~
      |                      (           )
#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...