南阳题目915-+-字符串

来源:互联网 发布:广东粤数大数据 编辑:程序博客网 时间:2024/03/28 18:40

+-字符串

时间限制:1000 ms  |  内存限制:65535 KB
难度:1
描述
Shiva得到了两个只有加号和减号的字符串,字串长度相同。Shiva一次可以把一个加号和它相邻的减号交换。他想知道最少需要多少次操作才能把第一个字符串变换成第二个字符串。你现在要去帮助他完成那个这个问题。
输入
多组测试数据

每组数据有两行,每行包含一个由”+”和”-“最成的字符串。每个子符串长度不超过5000。
输出
仅一个整数,输出最少需要操作的次数。如果答案不存在,输出-1。
样例输入
++-+--+ -++--++ 
样例输出
4
来源
NBOJ
上传者



这个题要弄清楚一点,就是要想次数最少,我们要逐次比较,找第一个不相等的,然后从第二个串里面找出最近的相等的与第二个串不想等的位置进行替换,算出移动的


次数,依次算下去,如果有一次不能找到,证明无解



#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int main(){char s1[5001],s2[5001];int m,n,i,j,len,flag,Q;while(scanf("%s%s",s1,s2)!=EOF){len=strlen(s1);Q=0;int sum=0;for(i=0;i<len;i++){if(s1[i]!=s2[i]) {flag=1;for(j=i+1;j<len;j++){if(s2[j]==s1[i]){sum+=j-i;s2[j]=s2[i];flag=0;break;}}if(flag){Q=1;break;}}}if(Q)printf("-1\n");elseprintf("%d\n",sum); } return 0;} 


0 0