제출 #1116143

#제출 시각아이디문제언어결과실행 시간메모리
1116143adiyerNice sequence (IZhO18_sequence)C++17
76 / 100
2069 ms53284 KiB
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const int N = 4e5 + 11;

mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());

ll n, m, pos;
ll a[N], was[N], ans[N];

vector < ll > ord, g[N];

bool cyc;

void dfs(ll v){
	was[v] = 1;
	for(ll u : g[v])
		if(!was[u])
			dfs(u);
	ord.push_back(v);
}

bool f(ll sz){
	cyc = 0, ord.clear();
	fill(was, was + sz + 1, 0);
	for(ll i = 0; i <= sz; i++){
		g[i].clear();
		if(i - n >= 0) g[i].push_back(i - n);
		if(i + m <= sz) g[i].push_back(i + m);
	}
	for(ll i = 0; i <= sz; i++)
		if(!was[i])
			dfs(i);
	reverse(ord.begin(), ord.end());
	fill(was, was + sz + 1, 0);
	for(ll v : ord){
		was[v] = 1;
		for(ll u : g[v]){
			if(was[u]){
				return 0;
			}
		}
	}
	return 1;
}

void solve(){
	cin >> n >> m;
	ll l = 0, r = n + m, val = 0;
	while(r - l > 1){
		ll md = (l + r) / 2;
		if(f(md)) l = md;
		else r = md;
	}
	fill(ans, ans + l + 1, 0), f(l);
	for(ll i = 0; i <= l; i++) ans[ord[i]] = i + 1;
	ll p = ans[0];
	cout << l << '\n';
	for(ll i = 1; i <= l; i++) cout << ans[i] - p << ' ', p += ans[i] - p;
	cout << '\n';
}

signed main(){
	ll cs;
	cin >> cs;
	while(cs--){
		solve();
	}
}

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

sequence.cpp: In function 'void solve()':
sequence.cpp:52:23: warning: unused variable 'val' [-Wunused-variable]
   52 |  ll l = 0, r = n + m, val = 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...