Submission #170552

#TimeUsernameProblemLanguageResultExecution timeMemory
170552SamAndNice sequence (IZhO18_sequence)C++17
58 / 100
2069 ms31540 KiB
#include <bits/stdc++.h> using namespace std; const int N = 400005; int ka() { int x = 0; while (1) { char y = getchar(); if ('0' <= y && y <= '9') x = (x * 10) + (y - '0'); else return x; } } char uu[12]; void tp(int x) { if (x == 0) { putchar('0'); return; } if (x < 0) { putchar('-'); x *= (-1); } int i = 0; while (x) { uu[i++] = (x % 10) + '0'; x /= 10; } for (i = i - 1; i >= 0; --i) putchar(uu[i]); } int n, m; vector<int> a[N]; int c[N]; bool dfs(int x) { c[x] = 1; for (int i = 0; i < a[x].size(); ++i) { int h = a[x][i]; if (c[h] == 1) return true; if (c[h] == 0) if (dfs(h)) return true; } c[x] = 2; return false; } bool stg(int x) { for (int i = 0; i <= x; ++i) a[i].clear(); for (int i = 0; i <= x; ++i) { if (i + m <= x) a[i + m].push_back(i); if (i + n <= x) a[i].push_back(i + n); } for (int i = 0; i <= x; ++i) c[i] = 0; for (int i = 0; i <= x; ++i) { if (dfs(i)) return false; } return true; } vector<int> v; void dfs1(int x) { c[x] = 1; for (int i = 0; i < a[x].size(); ++i) { int h = a[x][i]; if (c[h]) continue; dfs1(h); } v.push_back(x); } int p[N]; void solv() { //n = ka(); //m = ka(); scanf("%d%d", &n, &m); int l = min(n, m) - 1, r = N - 1; int ans; while (l <= r) { int m = (l + r) / 2; if (stg(m)) { ans = m; l = m + 1; } else r = m - 1; } //tp(ans); //putchar('\n'); printf("%d\n", ans); //return; for (int i = 0; i <= ans; ++i) a[i].clear(); for (int i = 0; i <= ans; ++i) { if (i + m <= ans) a[i + m].push_back(i); if (i + n <= ans) a[i].push_back(i + n); } v.clear(); for (int i = 0; i <= ans; ++i) c[i] = 0; for (int i = 0; i <= ans; ++i) { if (!c[i]) dfs1(i); } for (int i = 0; i < v.size(); ++i) p[v[i]] = i; for (int i = 1; i <= ans; ++i) { tp(p[i] - p[i - 1]); putchar(' '); //printf("%d ", p[i] - p[i - 1]); } putchar('\n'); //printf("\n"); } int main() { int tt; //tt = ka(); scanf("%d", &tt); while (tt--) { solv(); } return 0; }

Compilation message (stderr)

sequence.cpp: In function 'bool dfs(int)':
sequence.cpp:49:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < a[x].size(); ++i)
                     ~~^~~~~~~~~~~~~
sequence.cpp: In function 'void dfs1(int)':
sequence.cpp:87:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < a[x].size(); ++i)
                     ~~^~~~~~~~~~~~~
sequence.cpp: In function 'void solv()':
sequence.cpp:137:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i = 0; i < v.size(); ++i)
                     ~~^~~~~~~~~~
sequence.cpp:102:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d", &n, &m);
     ~~~~~^~~~~~~~~~~~~~~~
sequence.cpp: In function 'int main()':
sequence.cpp:153:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d", &tt);
     ~~~~~^~~~~~~~~~~
#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...