思维-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;
}

--(完)--

转载于:https://www.cnblogs.com/Bcai0797/p/7003178.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值