传送门

思路:“Dreamoon will choose a number pipi from range [1,n−li+1](inclusive) and will paint all cells from pipi to pi+li−1(inclusive) in ii-th color.”可以知道从[1, n - li - 1]任意位置往后染pi个格子为第ith种颜色。

容易想到,如果∑li < n,说明"-1"。

如果∑li>=n,因为我们不知道怎么染色才好,但我们知道SUM = ∑li,即我们目前还可以染色SUM块。不如我们类贪心的思想染色,这样我们可以分成两种情况:

假设now为当前的pi,len为剩余未染色的块

①SUM - now >= len - 1

说明我们只用当前颜色染色1块,之后SUM-now的个数也可以染色剩余的部分,那么 SUM -= now ,n -= 1

②SUM - now < len - 1

说明我们如果用当前颜色只染色1块,则SUM - now 不能染色剩余的 len - 1,那么我们需要让

SUM - now == len - 1 - ? (==>) ? = (len - 1) - (SUM - now),则当前颜色需要染色 ? + 1个才行。

这样我们可以用pre_s,pre_d记录之前的开始位置和染色长度。

当然我们不能忘记一个条件“每种颜色只能在[1, n - li - 1]开始往后染色”,如果(n - li - 1) < pre_s + pre_d,

说明我们无法完成满足题意的染色,因为我们前面是尽可能少的染色切满足题目要求,如果仍然无法满足,说明没有可行解。

 1 #include <iostream>
2 #include <cstdio>
3 #include <algorithm>
4 #include <cstring>
5 #include <cmath>
6 #include <queue>
7 #include <vector>
8 #include <cstring>
9 #include <functional>
10 #define LL long long
11 using namespace std;
12
13 const int N = 1e5 + 10;
14 int L[N], inx[N];
15
16 void solve ()
17 {
18 int n, m, len;
19 scanf("%d%d", &n, &m);
20
21 LL Sum_d = 0;
22 for(int i = 1; i <= m; ++i) {
23 scanf("%d", L + i);
24 Sum_d += L[i];
25 }
26
27 int pre_s, pre_d;
28 pre_s = 1; pre_d = 0;
29 len = n;
30 for(int i = 1; i <= m; ++i) {
31 //printf("start = %d L = %d\n", pre_s + pre_d, n - L[i] + 1);
32 if(n - L[i] + 1 < pre_s + pre_d) { break; }
33
34 if(Sum_d - L[i] >= len - 1) {
35 Sum_d -= L[i];
36 len -= 1;
37 pre_s = pre_s + pre_d;
38 pre_d = 1;
39 } else {
40 int tmp_d = (len - 1) - (Sum_d - L[i]);
41 if(tmp_d + 1 > L[i]) { break; }
42 Sum_d -= L[i];
43 len -= (1 + tmp_d);
44 pre_s = pre_s + pre_d;
45 pre_d = (1 + tmp_d);
46 }
47 inx[i] = pre_s;
48 }
49
50 // cout << "len = " << len << endl;
51
52 if(len > 0) {
53 printf("-1\n");
54 } else{
55 for(int i = 1; i <= m; ++i) { printf("%d ", inx[i]); }
56 printf("\n");
57 }
58
59
60 }
61
62 int main()
63 {
64 solve();
65
66 return 0;
67 }

Dreamoon Likes Coloring 【CF 1329 A】的更多相关文章

  1. 【39.68%】【CF 714 C】Filya and Homework

    time limit per test 1 second memory limit per test 256 megabytes input standard input output standar ...

  2. 【Cf #503 B】The hat(二分)

    为什么Cf上所有的交互题都是$binary \; Search$... 把序列分成前后两个相等的部分,每一个都可以看成一条斜率为正负$1$的折线.我们把他们放在一起,显然,当折线的交点的横坐标为整数时 ...

  3. 【cf比赛记录】Codeforces Round #606 (Div. 2, based on Technocup 2020 Elimination Round 4)

    比赛传送门 只能说当晚状态不佳吧,有点头疼感冒的症状.也跟脑子没转过来有关系,A题最后一步爆搜没能立即想出来,B题搜索没有用好STL,C题也因为前面两题弄崩了心态,最后,果然掉分了. A:简单数学 B ...

  4. UOJ30——【CF Round #278】Tourists

    1.感谢taorunz老师 2.题目大意:就是给个带权无向图,然后有两种操作, 1是修改某个点的权值 2是询问,询问一个值,就是u到v之间经过点权的最小值(不可以经过重复的点) 操作数,点数,边数都不 ...

  5. 【CF刷题】14-05-12

    Round 236 div.1 A:只需要每个点连接所有比他大的点,知道边用完为止. //By BLADEVIL #include <cmath> #include <cstdio& ...

  6. UOJ #30. 【CF Round #278】Tourists

    Description Cyberland 有 n 座城市,编号从 1 到 n,有 m 条双向道路连接这些城市.第 j 条路连接城市 aj 和 bj.每天,都有成千上万的游客来到 Cyberland ...

  7. UOJ #30【CF Round #278】Tourists

    求从$ x$走到$ y$的路径上可能经过的最小点权,带修改  UOJ #30 $ Solution:$ 如果两个点经过了某个连通分量,一定可以走到这个连通分量的最小值 直接构建圆方树,圆点存原点的点权 ...

  8. 【Cf #449 C】Willem, Chtholly and Seniorious(set维护线段)

    这里介绍以个小$trick$,民间流传为$Old Driver Tree$,实质上就是$set$维护线段. 我们将所有连续一段权值相同的序列合并成一条线段,扔到$set$里去,于是$set$里的所有线 ...

  9. 【Cf #503 C】Sergey's problem(有趣的构造)

    感觉这种构造题好妙啊,可我就是想不到诶. 给出一张无自环的有向图,回答一个独立集,使得图中任意一点都可以被独立集中的某一点两步之内走到. 具体构造方案如下: 下标从小到大枚举点,如果该点没有任何标记, ...

随机推荐

  1. JZOJ2020年9月12日提高B组反思

    CSP第1轮倒计时:29天 JZOJ2020年9月12日提高B组反思 T1 放在T1却是最难的一题 明显需要高精度 但是我小学奥数没学好,不知道怎么把正有理数转化成分数 T2 明显的DP 可惜的是我文 ...

  2. 为什么 redo log 具有 crash-safe 的能力,是 binlog 无法替代的?

    昨天在复习 MySQL 日志相关的知识,学的东西过一段时间后就会遗忘,遗忘后再重新思考,往往会有新的收获.想到几个问题,把它记录下来. 为什么 redo log 具有 crash-safe 的能力,而 ...

  3. Sql注入--数字型手工测试

    Sql注入--数字型手工测试 漏洞原因:是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的"数据"拼接到SQL语句中后,被当作SQL语句的一部分执行. 从而 ...

  4. 区块链知识博文1: 共识算法之争(PBFT,Raft,PoW,PoS,DPoS,Ripple)

    注:这是本人读到的关于共识算法最全和最好的分享博文,系统的介绍了拜占庭容错技术以及共识算法的原理和常用共识算法,原文链接请见后. 目录 一.拜占庭容错技术(Byzantine Fault Tolera ...

  5. PyQt(Python+Qt)学习随笔:MoviePy视频转GIF动图相关方法介绍

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 MoviePy能处理的视频是ffmpeg格式的,老猿理解支持的文件类型 ...

  6. PyQt(Python+Qt)学习随笔:使用pyqtConfigure建立信号和槽的连接

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在PyQt中,一般信号和槽的连接是通过connect方法建立的,语法如下: connect(slot ...

  7. [BJDCTF 2nd]简单注入

    [BJDCTF 2nd]简单注入 hint.txt出现了内容. 大概意思和国赛一道题相同. username处注入\来转义单引号,password处使用sql语句整数型注入. 例如: 传入admin\ ...

  8. TMOOC-1709-小明复仇

    题目描述 小明所在的世界上一共有n个城市,城市间有m条双向道路.小明现在在城市1,他想到位于城市n的小韩隆家询问他为什么没有将自己的五三复原完成.由于小韩隆手下有许多小弟,小明担心自己可能再也回不来, ...

  9. Acwing 734. 能量石

    贪心(微扰) + dp 这道题还是比较难的,前置知识: 贪心的微扰(邻项交换)证法,例题:国王游戏,耍杂技的牛 01背包 算法1:暴力\(O(T * n! * n)\) 可以\(dfs\)全排列枚举所 ...

  10. 题解-CF1307G Cow and Exercise

    CF1307G Cow and Exercise 给 \(n\) 点 \(m\) 边的带权有向图,边 \(i\) 为 \((u_i,v_i,w_i)\).\(q\) 次询问,每次给 \(x_i\),问 ...