标签:blog href 思路 blank ble codeforce turn get set
http://codeforces.com/problemset/problem/739/A
对于一个非负整数数列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; }
--(完)--
标签:blog href 思路 blank ble codeforce turn get set
原文地址:http://www.cnblogs.com/Bcai0797/p/7003178.html