传送门

思路:“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 }

最新文章

  1. Hibernate学习笔记4
  2. 如何离线下载Chrome的安装包
  3. 继续寻找app开发的技术方案
  4. 2016 Multi-University Training Contest 8
  5. DEV界面皮肤
  6. 论文笔记之:DeepCAMP: Deep Convolutional Action &amp; Attribute Mid-Level Patterns
  7. MVC4.0 利用IActionFilter实现单一Action返回多种结果
  8. 【风马一族_xml】xmlp之dtd1
  9. 关于方程x^2+y^2=p (p为素数)的解问题
  10. SMBUS(IIC)总线
  11. 自学Android的第一个小程序(小布局、button点击事件、toast弹出)
  12. 利用jackson-databind,复杂对象对象和json数据互转
  13. 多路复用(select、epoll)实现tcp服务
  14. bzoj 1926: [Sdoi2010]粟粟的书架 (主席树+二分)
  15. 百度分享到修改url
  16. 快速签发 Let&#39;s Encrypt 证书指南
  17. adb和机顶盒一些常识
  18. Shiro入门 - 通过自定义Realm连数数据库进行认证
  19. windows10系统下安装pygame
  20. Powershell渗透测试系列–进阶篇

热门文章

  1. MongoTemplate 移除 _class 字段
  2. 你说说对Java中SPI的理解吧
  3. 问题:PyCharm调试方法Force Step over与step over的区别
  4. 软工团队作业--Scrum冲刺集合贴
  5. 条件循环语句组成了Python代码的骨架
  6. CSP-S2020初赛游记
  7. tengine下载和安装
  8. MySQL全备及备份文件删除脚本
  9. 搭建本地yum镜像源
  10. gnuplot添加直线和箭头