SGU 170 Particles(规律题)

题目链接:http://acm.sgu.ru/problem.php?contest=0&problem=170

解题报告:输入两个由'+'和'-'组成的字符串,让你判断第二个串能不能由第一个串中的字符交换位置得到,不能的话输出-1,能的话输出最少的需要交换的次数。

一开始以为是DP,后来仔细一看发现,+号之间相对的位置是固定的,就是说如果可以,+号在调换位置的过程中是不会跟+号调换的,只跟-号调换,只有这样才能保证交换的次数是最少的。

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<iostream>
 4 #include<algorithm>
 5 using namespace std;
 6 const int maxn = 5000+5;
 7 char s[maxn],t[maxn];
 8 int tt1[maxn],tt2[maxn];
 9 int main()
10 {
11     while(scanf("%s%s",s,t)!=EOF)
12     {
13         int len1 = strlen(s);
14         int len2 = strlen(t);
15         if(len1 != len2)   //两个串长度不同,肯定不行
16         {
17             printf("-1\n");
18             continue;
19         }
20         int f1 = 0,f2 = 0;
21         for(int i = 0;i < len1;++i)
22         if(s[i] == '+')
23         tt1[f1++] = i;
24         for(int i = 0;i < len2;++i)
25         if(t[i] == '+')
26         tt2[f2++] = i;
27         if(f1 != f2)       //'+'这个数目不相同,肯定不行
28         {
29             printf("-1\n");
30             continue;
31         }
32         int ans = 0;
33         for(int i = 0;i < f1;++i)
34         ans += abs(tt1[i] - tt2[i]);
35         printf("%d\n",ans);
36     }
37     return 0;
38 }
39     
View Code
posted @ 2014-07-18 22:09  xiaxiaosheng  阅读(201)  评论(0编辑  收藏  举报