• 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
    ");
    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
    ");
    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
    ",ans);
    36     }
    37     return 0;
    38 }
    39     
    View Code
  • 相关阅读:
    SAS学习 day10
    SAS学习 day9
    SAS学习 day8
    Python解释器 发展史
    os. 模块
    字典
    类型1
    计算机编码
    EDA 会议整理
    2020-8-27
  • 原文地址:https://www.cnblogs.com/xiaxiaosheng/p/3854338.html
Copyright © 2020-2023  润新知