码迷,mamicode.com
首页 > 其他好文 > 详细

思维-CF-739A

时间:2017-06-13 20:36:23      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:blog   href   思路   blank   ble   codeforce   turn   get   set   

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

标签:blog   href   思路   blank   ble   codeforce   turn   get   set   

原文地址:http://www.cnblogs.com/Bcai0797/p/7003178.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!