NYOJ-+-字符串

+-字符串

时间限制:1000 ms  |  内存限制:65535 KB

难度:1

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

每组数据有两行,每行包含一个由”+”和”-“最成的字符串。每个子符串长度不超过5000。

输出
仅一个整数,输出最少需要操作的次数。如果答案不存在,输出-1。
样例输入
++-+--+
-++--++ 
样例输出
4

太水啊。这样也能通过。哈哈。思路大致是这样的:  输出-1的这种情况:当两个字符串长度或者+号的个数不相等时,肯定不匹配,应输出-1;  非-1情况:记录两个字符串中+号的位置。匹配后,第一个字符串的第i个+号肯定和第二个字符串的第i个+号相匹配的。        那么只需把各个+号的位置差算出即可。这些差的和也就是最后结果。
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <string.h>
 4 int a[5000],b[5000];
 5 char s1[5000],s2[5000];
 6 int main(void){
 7     while(scanf("%s%s",s1,s2) != EOF){
 8         int len1 = strlen(s1),m = 0;
 9         for(int i = 0; i < len1; i++){
10             if(s1[i] == ‘+‘)
11                 a[m++] = i;
12         }
13         int len2 = strlen(s2),n = 0;
14         for(int i = 0; i < len2; i++){
15             if(s2[i] == ‘+‘)
16                 b[n++] = i;
17         }
18         if(len1 != len2 || m != n){
19             printf("-1\n");
20             continue;
21         }
22         int result = 0;
23         for(int i = 0; i < n; i++){
24             result += abs(a[i] - b[i]);
25         }
26         printf("%d\n",result);
27     }
28     return 0;
29 }

时间: 2024-10-05 05:04:58

NYOJ-+-字符串的相关文章

NYOJ字符串右移

字符串右移 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 LZQ最近迷上了字符串,于是他有一个问题想考你,聪明的你一定知道答案.问题如下:给你一个字符串,让你对其进行向右移动K次,输出新的字符串. 输入 输入数据有多组,每组有一个字符串STR与一个数字K,表示对字符串STR向右移动K位. 输出 输出新的字符串STR1. 样例输入 abcd1234 4 sdfe123f 10 样例输出 1234abcd 3fsdfe12 来源 原创 #include<cstdio>

NYOJ 915 +-字符串

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

NYOJ 685 查找字符串(map)

查找字符串 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 小明得到了一张写有奇怪字符串的纸,他想知道一些字符串出现了多少次,但这些字符串太多了,他想找你帮忙,你能帮他吗?输入字符包括所有小写字母.'@'.'+'. 输入 第一行包含一个整数T(T<=100).表示测试数据组数. 接下来每组数据第一行包含两个整数n,m(n,m<100000),分别表示有n个字符串,小明要问你m次. 接下来n行,每行包含一个字符串,长度不大于15. 接下来m行,每行包含一个字符串,表

NYOJ 658 字符串右移

字符串右移 时间限制:1000 ms  |  内存限制:65535 KB 难度:1 描述 LZQ最近迷上了字符串,于是他有一个问题想考你,聪明的你一定知道答案.问题如下:给你一个字符串,让你对其进行向右移动K次,输出新的字符串. 输入 输入数据有多组,每组有一个字符串STR与一个数字K,表示对字符串STR向右移动K位. 输出 输出新的字符串STR1. 样例输入 abcd1234 4 sdfe123f 10 样例输出 1234abcd 3fsdfe12 AC码: #include<stdio.h>

NYOJ -37回文字符串

这道题看了好大会没有思路,上网一搜发现这么简单,但是我为什么就想不到呢,??就是求和它的逆序之后的字符串最长公共子序列,然后用总的长度减去它就行了.原因是是因为只要是在公共子序列里面,那么他就是对称的,少的那些就是需要补的 代码如下: 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 7 cons

nyoj 113 字符串替换 (string中替换函数replace()和查找函数find())

字符串替换 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 编写一个程序实现将字符串中的所有"you"替换成"we" 输入 输入包含多行数据 每行数据是一个字符串,长度不超过1000 数据以EOF结束 输出 对于输入的每一行,输出替换后的字符串 样例输入 you are what you do 样例输出 we are what we do读一行的方法:用geiline(cin,s) 1 #include <iostream>

NYoj 685 查找字符串

描述 小明得到了一张写有奇怪字符串的纸,他想知道一些字符串出现了多少次,但这些字符串太多了,他想找你帮忙,你能帮他吗?输入字符包括所有小写字母.‘@’.‘+’. 输入 第一行包含一个整数T(T<=100).表示测试数据组数.接下来每组数据第一行包含两个整数n,m(n,m<100000),分别表示有n个字符串,小明要问你m次.接下来n行,每行包含一个字符串,长度不大于15.接下来m行,每行包含一个字符串,表示小明要问该串出现的次数. 输出 输出每组小明询问数串出现的次数. 样例输入 1 5 3

NYOJ 题目915 +-字符串

题目描述: Shiva得到了两个只有加号和减号的字符串,字串长度相同.Shiva一次可以把一个加号和它相邻的减号交换.他想知道最少需要多少次操作才能把第一个字符串变换成第二个字符串.你现在要去帮助他完成那个这个问题 输入 多组测试数据 每组数据有两行,每行包含一个由"+"和"-"最成的字符串.每个子符串长度不超过5000. 输出 仅一个整数,输出最少需要操作的次数.如果答案不存在,输出-1. 样例输入 ++-+--+ -++--++ 样例输出 4 #include&

nyoj 96 n-1位数【字符串简单题】

n-1位数 时间限制:3000 ms  |  内存限制:65535 KB 难度:1 描述 已知w是一个大于10但不大于1000000的无符号整数,若w是n(n≥2)位的整数,则求出w的后n-1位的数. 输入 第一行为M,表示测试数据组数. 接下来M行,每行包含一个测试数据. 输出 输出M行,每行为对应行的n-1位数(忽略前缀0).如果除了最高位外,其余位都为0,则输出0. 样例输入 4 1023 5923 923 1000 样例输出 23 923 23 0 来源 [rooot]原创 上传者 ro

nyoj 915 +-字符串【字符串】

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