分析

mex(a) 表示不在a中的最小非负整数
ans[i] 表示最少的操作数使得mex(a) = i
我们用个counter记录一下原始每个位置出现的次数
我们的思路很简单:找出缺口,然后把多余的平铺过去,若铺不过去就是-1
贪心:多余的选最近的
然后如果这个位置有数的话,统一把当前位置的也挪走,再加用过的used
然后如果有多的就放入rest
如果这个位置没有数的话,需要找到一个最近的rest填过去,然后更新used
然后如果rest用完为0,就更新rest,每次取的都是rest[-1]
如果当前为0,且rest没有了,说明不可能继续延申,直接返回ans

ac code

import sys
from collections import defaultdict, Counter
input = sys.stdin.readlinedef solve():n = int(input())a = list(map(int, input().split()))# mex(a) 表示不在a中的最小非负整数# ans[i] 表示最少的操作数使得mex(a) = ic = Counter(a)# 找出缺口,然后把多余的平铺过去,若铺不过去就是-1ans = [-1] * (n + 1)rest = []used = 0for i in range(n + 1):if c[i] > 0:ans[i] = c[i] + usedif c[i] > 1:rest.append([i, c[i] - 1])else:# 填充一下空缺ans[i] = used# 贪心找最近的rest用# 感觉下面这行是一个On# ids = list(rest.keys())if len(rest) == 0:# 后续全部炸裂print(*ans)returnelse:target = rest[-1][0]used += (i - target)rest[-1][1] -= 1if rest[-1][1] == 0:rest.pop()print(*ans)if __name__ == '__main__':for _ in range(int(input())):solve()

TLE code

import sys
from collections import defaultdict, Counter
input = sys.stdin.readlinedef solve():n = int(input())a = list(map(int, input().split()))# mex(a) 表示不在a中的最小非负整数# ans[i] 表示最少的操作数使得mex(a) = ic = Counter(a)# 找出缺口,然后把多余的平铺过去,若铺不过去就是-1ans = [-1] * (n + 1)rest = defaultdict(int)used = 0for i in range(n + 1):if c[i] > 0:ans[i] = c[i] + usedif c[i] > 1:rest[i] = c[i] - 1else:# 填充一下空缺ans[i] = used# 贪心找最近的rest用ids = list(rest.keys())if len(ids) == 0:# 后续全部炸裂print(*ans)returnelse:target = ids[-1]used += (i - target)rest[target] -= 1if rest[target] == 0:del rest[target]print(*ans)if __name__ == '__main__':for _ in range(int(input())):solve()

总结

list里面的pop 是o1
如果用defauldict,list(d.keys())是on 炸裂

codeforces:E. MEX and Increments【贪心 + 略加优化】相关推荐

  1. [CodeForces 1603C] Extreme Extension(贪心 + 数论分块优化dp)

    problem CodeForces solution observation1:\text{observation1}:observation1: 对于一个非空子段 [l,r][l,r][l,r], ...

  2. #762 (Div. 3) E. MEX and Increments(贪心构造

    E. MEX and Increments 题意: 思路: 贪心加模拟 code: #include<bits/stdc++.h> #define endl '\n' #define ll ...

  3. MEX and Increments

    MEX and Increments 题面翻译 给你一个数列,每次可以花费 111 代价将其中一个数加一.从 000 到 nnn 分别输出至少要花费多少才能使这个数是数列中没有出现的最小的非负整数. ...

  4. E. MEX and Increments

    E. MEX and Increments 链接 题意:数组每一个数都可以加任意次数的1 求当前数组中缺失为i(0<=i<=n)的操作个数 思路: 每一个i 都是构成前面的操作次数加上将当 ...

  5. codeforces Gym 100338E Numbers (贪心,实现)

    题目:http://codeforces.com/gym/100338/attachments 贪心,每次枚举10的i次幂,除k后取余数r在用k-r补在10的幂上作为候选答案. #include< ...

  6. Codeforces 671E Organizing a Race (贪心、线段树)

    题目链接 https://codeforces.com/contest/671/problem/E 题解 完全不会做--基本是抄lk的代码 ruogu的题解: https://www.luogu.co ...

  7. CodeForces - 1529E Trees of Tranquillity(贪心+线段树)

    题目链接:https://vjudge.net/problem/CodeForces-1529E 题目大意:给出两棵根节点为 111 的树,分别称为 AAA 树和 BBB 树,现在通过两棵树可以构造出 ...

  8. CodeForces - 1348D Phoenix and Science(贪心)

    题目链接:点击查看 题目大意:起始时有一个细菌,质量为 1 ,每个白天可以选择数个细菌进行分裂,可以是 0 个,也可以是全部,然后每个晚上所有细菌的质量加一,问最少需要多少天所有细菌的总和可以达到 n ...

  9. CodeForces - 1303D Fill The Bag(贪心+模拟)

    题目链接:点击查看 题目大意:给出一个背包,容量为 k ,再给出 n 个物品,每个物品的大小保证是 2 的幂次,现在可以进行操作,使得一个物品分为大小相等的,且大小等于原物品一半的两个物品,比如一个物 ...

最新文章

  1. Java缓存学习之五:spring 对缓存的支持
  2. jdbc连接操作mysql,直接操作和预处理方式
  3. Hyperledger Fabric 1.0 实战开发系列 第三课 chaincode开发
  4. Unreal Engine 4 中的 UI 优化技巧
  5. python网络爬虫爬取视频_Python网络爬虫——爬取小视频网站源视频!自己偷偷看哦!...
  6. [Flink] Flink的应用场景
  7. LeetCode刷题系列(三)排序
  8. kibana是什么_三千字带你搞懂什么是ELK
  9. 月圆之夜,更新了一下1024客户端【强烈推荐更新】
  10. sd卡卡槽_还在傻傻分不清楚SD卡、Micro SD、TF卡?卡槽马上都要取消了
  11. 基于QT开发的线性代数初学者的矩阵计算器设计
  12. 挑筋(挑治)疗法——针挑治疗痔疮
  13. 笔记本电脑开wifi热点小技巧,bat文件实现
  14. html计算梯形的面积,数学教案计算梯形的面积
  15. uniapp 获取android设备 GPS 信号强弱
  16. 【Arcpy】批量合并重叠拓扑
  17. 联通不断发短信-尊敬的用户请回复以下编码办理业务:599
  18. 黑苹果11.0big sur驱动因特尔英特尔intel82599万兆网卡教程
  19. 由点及面,一叶知秋------集合大家庭
  20. 交换机配置软件具有的作用

热门文章

  1. 计算机的rom与硬盘区别,RAM和ROM亲们傻傻分不清?
  2. Java将图片放入word文档中
  3. JMokit中的@Mocked与@Injectable区别
  4. 眼花缭乱中看Metro Style—MS Apps Store—Desktop Apps以及Win-Runtime和Win32
  5. 为什么app会被常常攻击?如何预防攻击?
  6. wp7编程环境配置(包含xp下安装)
  7. matplotlib plot画图不弹框
  8. win10资源管理器拖拽文件卡死无响应
  9. 【开源】发布一个软件“WeNote 微便签”,比系统自带的便笺好用,每个便签可独立设倒计时
  10. ff14服务器延迟滑步,ff14 5.0黑魔怎么玩_最终幻想14 5.0黑魔输出手法