首页 > 代码库 > 思维-CF-739A
思维-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
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。