一战到底编程挑战 平衡字符串
链接:https://ac.nowcoder.com/acm/problem/21840
来源:牛客网
有一个字符串S,由加号'+' 和 减号'-'组成
现在要反转一些字符(加号变减号,减号变加号)来使得至多有k个前缀是负平衡的
如果一个前缀的减号数量大于加号数量,我们称这个前缀是负平衡的
现在要反转一些字符(加号变减号,减号变加号)来使得至多有k个前缀是负平衡的
如果一个前缀的减号数量大于加号数量,我们称这个前缀是负平衡的
输入描述:
第一行输入一个字符串S (1≤|S|≤501≤|S|≤50)
第二行输入一个整数k (0≤k≤|s|0≤k≤|s|)
输出描述:
输出一个整数
备注:
子任务1:n <= 10
子任务2:n <= 20
子任务3:无限制
#include <stdio.h> #include <cstring> char s[1010], t[1010]; void Work(int c, int n){ for(int i = 0; i < n; i++){ t[i] = s[i]; if(t[i] == '-' && c) c--, t[i] = '+'; } } int Count(int n){ int cnt = 0, rnt = 0; for(int i = 0; i < n; i++){ cnt += t[i] == '+' ? 1 : -1; rnt += cnt < 0; } return rnt; } int main(){ int k; scanf("%s%d", s, &k); int n = strlen(s); for(int i = 0; i <= n; i++){ Work(i, n); if(Count(n) <= k){ printf("%d\n", i); break; } } return 0; }