nyoj915 +-字符串(贪心)
来源:互联网 发布:新浪微博数据冗余 编辑:程序博客网 时间:2024/04/28 14:40
+-字符串
时间限制:1000 ms | 内存限制:65535 KB
难度:1
- 描述
- Shiva得到了两个只有加号和减号的字符串,字串长度相同。Shiva一次可以把一个加号和它相邻的减号交换。他想知道最少需要多少次操作才能把第一个字符串变换成第二个字符串。你现在要去帮助他完成那个这个问题。
- 输入
- 多组测试数据
每组数据有两行,每行包含一个由”+”和”-“最成的字符串。每个子符串长度不超过5000。 - 输出
- 仅一个整数,输出最少需要操作的次数。如果答案不存在,输出-1。
- 样例输入
++-+--+ -++--++
- 样例输出
4
代码:(别人的,先存下,自己的稍后贴)
NUM 1:
#include <stdio.h>#include <string.h>int main(){ char a[5001]; char b[5001]; int i,j,m1,m2; int count; int len; while(scanf("%s%s",a,b)!=EOF) { m1=m2=0; len=strlen(a); for(i=0; i<len; i++) { if(a[i]=='+') m1++; if(b[i]=='+') m2++; } if(m1!=m2) { printf("-1\n"); continue; } //特判加号数量是否相等,不想等直接不存在 count=0;//记录操作的次数 for(i=0; i<len; i++) { if(a[i]!=b[i])//判断两个字符串的对应字符是否相等 { for(j=i+1; j<len; j++) { if(a[j]==b[i]) break; } count+=j-i; a[j]=a[i]; } } printf("%d\n",count); } return 0;}
NUM2:#include<iostream>#include<cstdio>#include<cstring>#include<cstdlib>#include<cmath>#include<algorithm>using namespace std;int main(){ string a,b;//子串长度不超过五千,求把a转化为b的次数 int n; while(cin>>a>>b) { int ap=0,ad=0,bp=0,bd=0; for(int i=0; i<a.length(); i++) { if(a[i]=='+') ap++; else ad++; } for(int i=0; i<b.length(); i++) { if(b[i]=='+') bp++; else bd++; } int co=0; if(ap!=bp||ad!=bd)//一定不可能 printf("%d\n",-1); else { for(int i=0; i<a.length();) { if(a[i]==b[i]) i++; else { for(int j=i; j<a.length()-1;) { if(a[j]==a[j+1]) j++; else { co++; char c=a[j]; a[j]=a[j+1]; a[j+1]=c; break; } } } } } printf("%d\n",co); } return 0;}
我的代码:
如图所示,变换方式这样
#include <stdio.h>#include <string.h>int main(){ char a[5000]; char b[5000]; while(~scanf("%s%s",a,b)) { int m1=0,m2=0; int len=strlen(a); for(int i=0;i<len;i++) { if(a[i]=='+') m1++; if(b[i]=='+') m2++; } if(m1!=m2) { printf("-1\n"); continue; }//筛掉+号数量不相等的情况 int sum=0; for(int i=0;i<len;i++)//遍历所有的地一串字符 { int j; if(a[i]!=b[i])//当两列字符串不相等时 { for(j=i+1;j<len;j++)//贪心策略:寻找在第一个字符串中与第二个字符串匹配的符号 { if(a[j]==b[i]) break;//找到位置 } sum+=j-i;//找到了位置经过j-i次变换 a[j]=a[i];//变换后把前面的符号和后面交换 } } printf("%d\n",sum); } return 0;}
PS:贪心,一步一步考虑,慢慢换
0 0
- nyoj915 +-字符串(贪心)
- NYOJ915 +-字符串
- nyoj915*+-字符串
- nyoj915 +-字符串
- nyoj915
- nyoj915
- +-字符串(贪心)
- 【贪心法】+-字符串
- NYOJ 915 +-字符串【贪心】
- 915 +-字符串【贪心+模拟】
- nyoj 915 +-字符串 贪心
- 完美字符串 贪心
- nyoj 915 +-字符串(贪心)
- 贪心算法之+-字符串
- nyoj 915 +-字符串(贪心)
- uva--1368(贪心,字符串模拟)
- CF 600C 贪心+字符串
- 贪心算法之完美字符串
- javascript之工厂模式
- 我竟然博士了
- 天天学习
- Spring MVC 的@RequestParam注解和request.getParameter("XXX")
- 作者找不到了,但是非常感谢作者(编码)
- nyoj915 +-字符串(贪心)
- GOP之M和N值介绍
- 【UVa658】【SPFA】【状态压缩】It's not a Bug,it's a Featurel.
- 《大话设计模式》-- 第26个 享元模式
- [BZOJ3942][Usaco2015 Feb]Censoring(栈+kmp)
- 键盘键值对应表
- 后台劳动者--探究服务
- CSS基础04- 优先级和display属性
- fine turning微调网络