南阳oj 915 +-字符串

来源:互联网 发布:c语言测时间间隔 编辑:程序博客网 时间:2024/04/27 13:23

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

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

++-+--+ -++--++

样例输出

4

以下附上代码:

#include<stdio.h>#include<cstring>#include<iostream>#include<algorithm>#include<math.h>#include<stdlib.h>#include<stack>#include<vector>#include<string.h>#include<map>#define INF 0x3f3f3f3f3fusing namespace std;char a[5005],b[5005];int a1[5000],a2[5005];int cha(int a,int b){    if(a>b)        return a-b;    else        return b-a;}int main(){    while(~scanf("%s%s",a,b))    {        int ans=0,k1=0,k2=0;        int l=strlen(a);        for(int i=0; i<l; i++)        {            if(a[i]!=b[i]&&a[i]=='+')                a1[k1++]=i;            if(a[i]!=b[i]&&a[i]=='-')                a2[k2++]=i;        }        if(k1!=k2)            printf("-1\n");        else        {            for(int i=0; i<k1; i++)            {                ans+=cha(a1[i],a2[i]);            }            printf("%d\n",ans);        }    }}
0 0
原创粉丝点击