栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

AT26 (iwi)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

AT26 (iwi)

文章目录
    • 题面翻译
    • 输入
    • 输出
    • 样例
      • 输入1:
      • 输出1:
      • 说明1:
      • 输入2:
      • 输出2:
      • 说明2:
    • 数据范围
    • 原题](https://utpc2011.contest.atcoder.jp/tasks/utpc2011_2)/[洛谷原题
    • 解题
      • 错误代码1
      • 错误代码2
      • AC代码1
      • AC代码2

题面翻译

定义对称如下:

  1. 空串
  2. 一个字母’i’
  3. 一个字母’w’
  4. 在两个字母(‘i’或’w’)中包含一个对称的字符串,如"iwi",“wiw”,“ii”,“www”
  5. 在括号中包含一个对称的字符串,注意括号有两种形式,1、“()” 2、“)(”,即"(i)“和”)i("均为合法对称字符串

求最少进行几次更改操作,使一个字符串变为对称

输入

一个由’i’,‘w’,'(‘和’)'组成的字符串

输出

一个正整数,即最少更改次数

样例 输入1:

(iwi)

输出1:

0

说明1:

改串已为对称,不许更改

输入2:

ii(((((ww

输出2:

5

说明2:

可以更改成ww((i))ww,当然也有其他做法

数据范围

输入字符串的长度len<=10

原题/洛谷原题 解题

题目并不难,但容易错

错误代码1
#include
using 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
#include
using 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啦!

AC代码1
#include
using 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 
#include
using 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<
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1012106.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号