zoukankan      html  css  js  c++  java
  • Dreamoon Likes Coloring

    题意:给出n个格子,按顺序进行m种操作,每种操作能把l [ i ] 个格子涂成一种颜色。

    现要求每种颜色至少出现在一个格子上,切所有格子都要涂上颜色。求每种操作开始涂的位置。

    先把所有操作长度加起来,如果小于n则一定不成立。

    贪心的涂格子,保证前面的操作尽可能的小且要满足涂满格子。

    把每一种颜色的长度尽可能地缩小(取决与sum的大小),然后实时更新sum和pos。

    当l[ i ]+pos-1>n 时,如果从pos开始涂,这种颜色的末尾格子会超过n,所以它开始涂的地方必须在pos之前。

    但前面的格子都是保证的最小,所以这个操作一定会覆盖前面的格子,不成立。

    #include<iostream>
    #include<cstring>
    #include<algorithm>
    #include<cstdio>
    #include<cmath>
    #include<map>
    #include<queue>
    #include<vector>
    #define ll long long
    #define F first
    #define S second
    #define debug(x); printf("debug%d
    ",x);
    #define rep(f,t) for(int i=f;i<=t;i++)
    const int inf=0x3f3f3f3f;
    const int mod=1e9+7;
    using namespace std;
    const int N=1e5+5;
    int ans[N];
    int pos;
    int l[N];
    int n,m;
    ll sum;
    int main()
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=m;i++)
        {
            scanf("%d",&l[i]);
            sum+=l[i];
        }
        if(sum<n)
        {
            printf("-1
    ");
            return 0;
        }
        pos=1;//一种颜色开始涂的位置。
        sum-=n;
        int flag=0;
        for(int i=1;i<=m;i++)
        {
            if(l[i]+pos-1>n)
            {
                flag=1;
                break;
            }
            if(sum>=l[i]-1)
            {
                sum-=l[i]-1;
                l[i]=1;
            }
            else
            {
                l[i]-=sum;
                sum=0;
            }
            ans[i]=pos;
            pos+=l[i];
        }
        if(flag)
            printf("-1
    ");
        else
        {
            for(int i=1;i<=m;i++)
            {
                printf("%d%c",ans[i],i==m?'
    ':' ');
            }
        }
        return 0;
    }
  • 相关阅读:
    Python字符串的定义与常用操作
    Python中yield返回生成器的详细方法
    python中把列表中的字符串转成整型的3种方法
    python基础教程:修改Python列表中元素的几种方法
    极致性能设计——开篇
    MySQL设计与实现
    Java平台标准版工具参考
    为什么for循环中的a=a++,a总是0
    JVM 分析工具快速查询手册
    从现代计算机低层看待性能和并发
  • 原文地址:https://www.cnblogs.com/switch-waht/p/12631573.html
Copyright © 2011-2022 走看看