1. 程式人生 > >思維-CF-739A

思維-CF-739A

mex 大於等於 href class 由於 printf .com pre cst

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