- 题面翻译
- 输入
- 输出
- 样例
- 输入1:
- 输出1:
- 说明1:
- 输入2:
- 输出2:
- 说明2:
- 数据范围
- 原题](https://utpc2011.contest.atcoder.jp/tasks/utpc2011_2)/[洛谷原题
- 解题
- 错误代码1
- 错误代码2
- AC代码1
- AC代码2
定义对称如下:
- 空串
- 一个字母’i’
- 一个字母’w’
- 在两个字母(‘i’或’w’)中包含一个对称的字符串,如"iwi",“wiw”,“ii”,“www”
- 在括号中包含一个对称的字符串,注意括号有两种形式,1、“()” 2、“)(”,即"(i)“和”)i("均为合法对称字符串
求最少进行几次更改操作,使一个字符串变为对称
输入一个由’i’,‘w’,'(‘和’)'组成的字符串
输出一个正整数,即最少更改次数
样例 输入1:(iwi)
输出1:0
说明1:改串已为对称,不许更改
输入2:ii(((((ww
输出2:5
说明2:可以更改成ww((i))ww,当然也有其他做法
数据范围输入字符串的长度len<=10
原题/洛谷原题 解题题目并不难,但容易错
错误代码1#includeusing namespace std; string n; int l,s,k; bool hui(char a,char b){ if(a==b || a=='(' && b==')' || a==')' && b=='(') return 1; return 0; } int main(){ cin>>n; l=n.size(); s=(l+1)/2; k=s; for(int i=0;i if(hui(n[i],n[l-i-1])) s--; } cout< 这个代码做错后,我去题解康了康,原来是 a = = b a==b a==b那错了
给你们看一个hack样例输入: ( ( ( ( ( ( (((((( ((((((
正确输出: 3 3 3
这个输出: 0 0 0你们可以试试…
错误代码2#includeusing namespace std; string n; int l,s,k; bool hui(char a,char b){ if(a=='i' && b=='i' || a=='w' && b=='w' || a=='(' && b==')' || a==')' && b=='(') return 1; return 0; } int main(){ cin>>n; l=n.size(); s=(l+1)/2; k=s; for(int i=0;i if(hui(n[i],n[l-i-1])) s--; } cout< 这个代码我找了2分钟才找到错误,大家可以找找看…
AC代码1
————————————————————————————分界线
忘了这个代码是歪国题,最后没输出换行 ’~’
然后改好后就AC啦!#includeusing namespace std; string n; int l,s,k; bool hui(char a,char b){ if(a=='i' && b=='i' || a=='w' && b=='w' || a=='(' && b==')' || a==')' && b=='(') return 1; //上面代码为核心,判断是否对称 return 0; } int main(){ cin>>n; l=n.size(); s=(l+1)/2;//最多改一边的字符,所以折半 k=s; for(int i=0;i if(hui(n[i],n[l-i-1]))//这里对n字符串进行对称比较 s--;//有对称就少一个修改 } cout< AC代码2#includeusing namespace std; string n; int l,s,k; bool hui(char a,char b){ if(a=='i' && b=='i' || a=='w' && b=='w' || a=='(' && b==')' || a==')' && b=='(') return 1; //上面代码为核心,判断是否对称 return 0; } int main(){ cin>>n; l=n.size(); s=0;//最少改0个,所以从0 k=(l+1)/2; for(int i=0;i if(hui(n[i],n[l-i-1])==0)//这里对n字符串进行对称比较,也可以写为~!hui(n[i],n[l-i-1])~ s++;//无对称就多一个修改 } cout<



