思维-CF-739A
Posted Bcai
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了思维-CF-739A相关的知识,希望对你有一定的参考价值。
http://codeforces.com/problemset/problem/739/A
Alyona and mex
对于一个非负整数数列a,定义mex(l, r)为不存在于a[l]~a[r]区间内的最小非负整数。
给定数列长度n,区间个数m。要求构造一个长度为n的数列使得这m个区间的最小mex最大。
输出m个区间的最小mex,以及构造的数列(多组解时只需要输出一组解即可)
解题报告
思路
(一开始没看懂题目....)
对于一个长度为Len的区间,这个区间的mex最大值显然为Len。
那么现在有m个区间,若其中最小区间的长度为Len,那么即使每个区间的mex都能取到最大值,最小mex也为Len。
那么构造数列时只需要保证最小的区间取到最大mex即可。
于是可以用0~Len-1循环构造数列,由于所有数列长度都大于等于Len,就能保证所有区间都能覆盖0~Len-1,那么所得解即为Len。
代码
#include <algorithm> #include <cstdio> const int maxn = 100005; int l, r, n, m; int minLen; int main() { scanf("%d%d", &n, &m); minLen = n; for (int i = 0; i < m; i++) { scanf("%d%d", &l, &r); minLen = std::min(minLen, r - l + 1); } printf("%d\n", minLen); int cnt = 0; for(int i=0; i<n; i++){ printf("%d ", cnt); cnt ++; cnt %= minLen; } printf("\n"); return 0; }
--(完)--
以上是关于思维-CF-739A的主要内容,如果未能解决你的问题,请参考以下文章
CF739E Gosha is hunting(费用流,期望)
CF739D Recover a functional graph
cf739E Gosha is hunting (flows)