Codeforces Round #381 (Div. 2) C. Alyona and mex(无语)

题目链接 http://codeforces.com/contest/740/problem/C

题意:有一串数字,给你m个区间求每一个区间内不含有的最小的数,输出全部中最小的那个尽量使得这个最小值最大,然后把符合条件的数字串输出,输出任意一种即可

这题只要理解题意差不多就能做出来了,很简单

由于题目要求的mex要最大(mex指着个区间中的数在0~n中缺少的最小的数字例如mex(1,2)=0,mex(0,2)=1,mex(0,1)=2)

所以尽量要从零开始递增,那么最小的mex值肯定是区间最小的那个,然后剩下的我们只要满足最小区间是从0开始的单调递增序列就可以了

其他区间靠取模来满足有一个简单的方法,就是1~n的数串赋值0~n-1然后模一下最小的mex即可,这样主要是为了满足得到最大的mex。

#include <iostream>
#include <cstring>
using namespace std;

int main()
{
    int n , m;
    cin >> n >> m;
    int MIN = 1e5 + 10;
    for(int i = 0 ; i < m ; i++) {
        int x , y;
        cin >> x >> y;
        MIN = min(MIN , y - x + 1);
    }
    cout << MIN << endl;
    for(int i = 0 ; i < n ; i++) {
        cout << i % MIN << ' ';
    }
    cout << endl;
    return 0;
}
原文地址:https://www.cnblogs.com/TnT2333333/p/6096308.html