博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SGU 170.Particles
阅读量:6922 次
发布时间:2019-06-27

本文共 738 字,大约阅读时间需要 2 分钟。

Solution:

              这其实是道很简单的题。

              只要从一端开始,以‘+’或‘-’,任意一种开始找,找到与目标串最近的相同字符的距离就是需要交换的次数。

              +++———            对齐第一个‘-’                  —+++——

                                        ------------> 

              ———+++                                                ———+++

 

              以‘-’为例,不断向一端交换的话,最后交换的其实只要当前的‘-’和一个‘+’的位置,其他‘-’的相对位置不变。

              因此只要从左到右匹配第i个‘-’,计算出它们的距离差,累加即可。

 

code:

         

#include 
#include
#define abs(x) (max(x,-(x)))using namespace std;const int INF = 5555;int len, a[INF], b[INF], n1, n2, ans;string st;int main() { cin >> st; len = st.size(); for (int i = 0; i < len; i++) if (st[i] == '-') a[++n1] = i; cin >> st; for (int i = 0, t = 0; i < len; i++) if (st[i] == '-') b[++n2] = i; if (n1 != n2) { cout << -1; return 0; } for (int i = 1; i <= n1; i++) ans += abs (a[i] - b[i]); cout << ans;}

  

转载于:https://www.cnblogs.com/keam37/p/3849933.html

你可能感兴趣的文章
1138: 零起点学算法45——求最大值
查看>>
bzoj1711[USACO07OPEN]吃饭Dining
查看>>
查找 oracle 数据库中包含某一字段的所有表的表名
查看>>
python+selenium之测试报告自动化测试实例
查看>>
根据select中选定option触发不同事件
查看>>
大数据系统介绍
查看>>
《大话设计模式》读书笔记-第6章 装饰模式
查看>>
java的日期时间处理(待更新)
查看>>
语音处理
查看>>
Sonar
查看>>
django之分页器
查看>>
第二阶段冲刺4
查看>>
[BZOJ2753]滑雪与时间胶囊
查看>>
学生课程成绩
查看>>
2015 Multi-University Training Contest 1 - 1009 Annoying problem
查看>>
运行os.fork()报AttributeError: module 'os' has no attribute 'fork'
查看>>
centos7下部署FastDFS分布式文件系统
查看>>
添加ASP.NET AJAX控件工具集到VS2010的方法
查看>>
Vue.js系列之三模板语法
查看>>
C# 多线程学习系列三之CLR线程池系列之ThreadPool
查看>>