제출 #1153999

#제출 시각아이디문제언어결과실행 시간메모리
1153999panNice sequence (IZhO18_sequence)C++20
76 / 100
317 ms14760 KiB
#include <bits/stdc++.h> //#include "includeall.h" //#include <ext/pb_ds/assoc_container.hpp> //#include <ext/pb_ds/tree_policy.hpp> #define endl '\n' #define f first #define s second #define pb push_back #define mp make_pair #define lb lower_bound #define ub upper_bound #define input(x) scanf("%lld", &x); #define input2(x, y) scanf("%lld%lld", &x, &y); #define input3(x, y, z) scanf("%lld%lld%lld", &x, &y, &z); #define input4(x, y, z, a) scanf("%lld%lld%lld%lld", &x, &y, &z, &a); #define print(x, y) printf("%lld%c", x, y); #define show(x) cerr << #x << " is " << x << endl; #define show2(x,y) cerr << #x << " is " << x << " " << #y << " is " << y << endl; #define show3(x,y,z) cerr << #x << " is " << x << " " << #y << " is " << y << " " << #z << " is " << z << endl; #define all(x) x.begin(), x.end() #define discretize(x) sort(x.begin(), x.end()); x.erase(unique(x.begin(), x.end()), x.end()); #define FOR(i, x, n) for (ll i =x; i<=n; ++i) #define RFOR(i, x, n) for (ll i =x; i>=n; --i) #pragma GCC optimize("O3","unroll-loops") using namespace std; mt19937_64 rnd(chrono::steady_clock::now().time_since_epoch().count()); //using namespace __gnu_pbds; //#define ordered_set tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> //#define ordered_multiset tree<int, null_type, less_equal<int>, rb_tree_tag, tree_order_statistics_node_update> typedef long long ll; typedef long double ld; typedef pair<ld, ll> pd; typedef pair<string, ll> psl; typedef pair<ll, ll> pi; typedef pair<pi, ll> pii; typedef pair<pi, pi> piii; mt19937 rng(chrono::steady_clock::now().time_since_epoch().count()); ll n, m, label = -1; bool fail = 0; vector<ll> ans, status; void dfs(ll x) { //show(x); if (status[x] == 2) return; if (status[x] == 1) {fail = 1; return;} status[x] =1; if (x + n < ans.size()) dfs(x + n); if (x -m >= 0) dfs(x -m); ans[x] = ++label; status[x] = 2; } bool cal(ll x) { fail = 0, label = -1; status.assign(x + 1, 0); ans.assign(x + 1, -1); for (ll i=0; i<=x; ++i) dfs(i); if (fail) return 0; return 1; } void solve() { cin >> n >> m; ll lo = 0, hi = 2e5; while (lo!=hi) { ll mid = (lo + hi + 1) >> 1; //show(mid); if (cal(mid)) lo = mid; else hi = mid-1; } cout << lo << endl; assert(cal(lo)); for (ll i=1; i<=lo; ++i) cout << ans[i]-ans[i-1] << ' '; cout << endl; } int main() { ll t; cin >> t; while (t--) solve(); return 0; }
#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...