璟雯院

珺璟如晔,雯华若锦

用户工具

站点工具


icpc:problems:luogup3056
problems
名称Clumsy Cows
题目编号P3056
题目链接luogu.com.cn/…
来源USACO
算法分类
难易程度一般般

Clumsy Cows

想法

需要考虑:)())( ( 三种有问题的情况:

  1. 对于)(,将左括号变为右括号,右括号变为左括号。两次操作
  2. 对于)),将一半的右括号变为左括号即可。一次操作
  3. 对于( (,将一半的右括号变为左括号即可。一次操作

如何统一的处理这三种情况?

类似一个栈,维护左括号。当左括号增加时,加入栈。当遇到右括号时,将栈里的左括号删除。如果栈内没有左括号,说明遇到了第一种或第二种。该右括号一定需要修改。则操作数增加,并且将该右括号变为左括号,因为对于第二种情况,不需要处理再读入的符号。最后栈中留存的左括号中,一半是变化的右括号,一半是原本就有的左括号。一半的左括号需要变化(第一种情况)。答案增加栈数量的一半。

代码实现

#include<cstdio>
#include<cstring>
char line[100010];
int main() {
	scanf("%s", line);
	int len = strlen(line), cnt=0, ans=0;
	for(int i=0; i<len; i++) {
		if(line[i] == '(')
			cnt++;
		else {
			if(cnt)
				cnt--;
			else {
				ans++;
				cnt++;
			}
		}
	}
	ans = ans + cnt/2;
	printf("%d", ans);
	return 0;
}
/app/www/public/data/pages/icpc/problems/luogup3056.txt · 最后更改: 2024/01/30 11:31 由 温婕莺