当前位置:网站首页>codeforce:C. Sum of Substrings【边界处理 + 贡献思维 + 灵光一现】
codeforce:C. Sum of Substrings【边界处理 + 贡献思维 + 灵光一现】
2022-07-04 12:52:00 【白速龙王的回眸】
分析
我们想让f最小
边界情况:没有1答案总是0
然后的话每个1,如果在中间的话贡献一定是1 + 10 = 11
唯一可能降低贡献的就是放在一头一尾
放在头:贡献变成10
放在尾:共享变成1
于是我们统计s所有1离头和尾最近的距离d1和d2
然后优先走到尾
判断k的取值是否大于等于d1 + d2, d2, d1分成四个状态
特别地,如果只有一个1的情况下,不可能又去头又去尾巴
所以这种情况当其大于等于d1 + d2就去d2即可
ac code
import sys
input = sys.stdin.readline
for _ in range(int(input())):
n, k = list(map(int, input().split()))
s = input()
cnt_1 = 0
for c in s:
if c == '1':
cnt_1 += 1
if cnt_1 == 0:
print(0)
continue
d1, d2 = 0, 0 # d1 from head, d2 from tail
for i in range(n):
if s[i] == '1':
d1 = i
break
for i in range(n):
if s[n - 1 - i] == '1':
d2 = i
break
# 1: not change
# 2: go to head
# 3: go to tail
# 10: go to tail and head
# we are delighted to go to tail first, and secondly go to head
flag = 1
if k >= d1 + d2:
flag = 10
elif k >= d2:
flag = 3
elif k >= d1:
flag = 2
else:
flag = 1
# different cases
ans = 0
if flag == 10:
if cnt_1 >= 2:
ans = 1 + 10 + 11 * (cnt_1 - 2) # cnt_1 >= 2
else:
ans = 1
elif flag == 3:
ans = 1 + 11 * (cnt_1 - 1)
elif flag == 2:
ans = 10 + 11 * (cnt_1 - 1)
else:
ans = 11 * cnt_1
print(ans)
总结
思维 + 贡献 + 边界处理
边栏推荐
- 为什么图片传输要使用base64编码
- Introducing testfixture into unittest framework
- Gorm read / write separation (rotation)
- GCC [6] - 4 stages of compilation
- [antd] how to set antd in form There is input in item Get input when gourp Value of each input of gourp
- 失败率高达80%,企业数字化转型路上有哪些挑战?
- 流行框架:Glide的使用
- QT how to detect whether the mouse is on a control
- 数据仓库面试问题准备
- MySQL的存储过程练习题
猜你喜欢
docker-compose公网部署redis哨兵模式
Detailed index of MySQL
实时数据仓库
聊聊保证线程安全的 10 个小技巧
Yingshi Ruida rushes to the scientific and Technological Innovation Board: the annual revenue is 450million and the proposed fund-raising is 979million
递增的三元子序列[贪心训练]
MATLAB中tiledlayout函数使用
Test process arrangement (2)
瑞吉外卖笔记
sql优化之查询优化器
随机推荐
测试流程整理(3)
2022游戏出海实用发行策略
去除重複字母[貪心+單調棧(用數組+len來維持單調序列)]
C # WPF realizes the real-time screen capture function of screen capture box
吃透Chisel语言.06.Chisel基础(三)——寄存器和计数器
MySQL的触发器
redis 日常笔记
How to operate and invest games on behalf of others at sea
ML之shap:基于boston波士顿房价回归预测数据集利用Shap值对LiR线性回归模型实现可解释性案例
数据仓库面试问题准备
Install and use MAC redis, connect to remote server redis
Golang uses JSON unmarshal number to interface{} number to become float64 type (turn)
vscode 常用插件汇总
How to package QT and share exe
flink sql-client.sh 使用教程
LifeCycle
Xcode 异常图片导致ipa包增大问题
海外游戏代投需要注意的
The font of markdown grammar is marked in red
R语言使用dplyr包的mutate函数对指定数据列进行标准化处理(使用mean函数和sd函数)并基于分组变量计算标准化后的目标变量的分组均值