Educational Codeforces Round 85 (Rated for Div. 2) D. Minimum Euler Cycle
题意:给个有向完全图,然后在里边按字典序跑欧拉回路。现在给出有向完全图的点数和遍历结点顺序的区间,然后把该区间的遍历结点顺序输出。
原题链接:https://codeforces.ml/problemset/problem/1334/D
分析:不难看出这个遍历的顺序是十分有规律的,即1 2 1 3 1 4 .. 1 n 2 3 2 4 ... 2 n...
那么就区间暴力枚举即可。
#include <bits/stdc++.h> #define rep(i, l, r) for(int i=l; i<=r ;i++) using namespace std; typedef long long ll; typedef pair<int, int> PII; typedef vector<int> VI; ll gcd(ll n, ll m) { return n % m == 0 ? m : gcd(m, n % m);} ll getNum(ll x, ll n, ll pre, ll k) { if(k >= n) return 1; if((x - pre) & 1) return k; else return k + (x - pre) / 2; } int main() { ios::sync_with_stdio(false); //freopen("data.txt", "r", stdin); //freopen("output.txt", "w", stdout); int T; cin>>T; while(T--) { ll n, l, r; cin>>n>>l>>r; ll pre = 0; ll Next = 2 * (n - 1); ll k = 1; for(ll i=l; i<=r ;i++){ while(i > Next && k != n){ pre = Next; Next += 2 * (n - k - 1); k++; } cout<<getNum(i, n, pre, k)<<" "; } cout<<endl; } return 0; }

浙公网安备 33010602011771号