915 +-字符串【贪心+模拟】
来源:互联网 发布:统计软件app 编辑:程序博客网 时间:2024/05/12 10:09
+-字符串
时间限制:1000 ms | 内存限制:65535 KB
难度:1
- 描述
- Shiva得到了两个只有加号和减号的字符串,字串长度相同。Shiva一次可以把一个加号和它相邻的减号交换。他想知道最少需要多少次操作才能把第一个字符串变换成第二个字符串。你现在要去帮助他完成那个这个问题。
- 输入
- 多组测试数据
每组数据有两行,每行包含一个由”+”和”-“最成的字符串。每个子符串长度不超过5000。 - 输出
- 仅一个整数,输出最少需要操作的次数。如果答案不存在,输出-1。
- 样例输入
++-+--+ -++--++
- 样例输出
4
贪心思想,如果不匹配,那就往后找到匹配的位置,然后模拟一步一步移动,并且累加移动的次数,直到字符串完全匹配之后,输出结果,如果在某个期间,找不到可以匹配的字符,那么就肯定不能匹配,就要输出 - 1了......
#include<stdio.h>#include<string.h>char a[5005],b[5005];int search(int s,char x)//查找距离最近的可以匹配的位置{for(int i=s;a[i]!=0;++i){if(a[i]==x){return i;//返回位置}}return -1;//找不到...}void swap(int l,int r){for(int i=r;i>l;--i)//把这途中的位置都进行交换{char tp;tp=a[i];a[i]=a[i-1];a[i-1]=tp;}}void slove(){int cnt=0,lena=strlen(a);for(int i=0;i<lena;++i){if(a[i]!=b[i])//不匹配的时候...{int tp=search(i,b[i]);//找到位置if(tp!=-1){swap(i,tp);//交换cnt+=(tp-i);//加上交换的次数}else{printf("-1\n");//否则return;}}}printf("%d\n",cnt);}int main(){while(~scanf("%s%s",a,b)){slove();}return 0;}
0 0
- 915 +-字符串【贪心+模拟】
- uva--1368(贪心,字符串模拟)
- sdjzu 1056:字符串最小表示 贪心模拟
- BZOJ 3799 字符串重组 贪心模拟乱搞
- NYOJ 915 +-字符串【贪心】
- nyoj 915 +-字符串 贪心
- nyoj 915 +-字符串(贪心)
- Codeforces 363C Fixing Typos 贪心+字符串模拟
- nyoj 915 +-字符串(贪心)
- +-字符串(贪心)
- 南阳 oj NYoj 贪心 题目915 +-字符串
- hdu 4393 贪心+模拟
- 【模拟\贪心】独木桥
- POJ 1033 (模拟+贪心)
- hdu4442(模拟+贪心)
- CSU1327+贪心+模拟
- LeetCode 之模拟&贪心
- HDU 1355 贪心模拟
- Jaxb annotation初步使用
- Ajax提高篇(3)在请求和响应中使用 XML(1)
- php 函数func_get_args()、func_get_arg()与func_num_args()之间的比较
- cocos2d-x 使用lua实现像素点击检测
- CoreAnimation-01-CALayer核心要点及实例解析
- 915 +-字符串【贪心+模拟】
- 发工资咯:) 2021 (完全背包)
- What's the EMR root password
- 我眼里的奇酷手机360OS
- NAT地址转换配置
- PAT 1068. Find More Coins (30)
- HDU 3518 && HDU 4416【后缀自动机len的使用】
- git log显示时间修改
- jquery获取html元素的绝对位置和相对位置的方法