Topcoder SRM 663 DIV 1
ABBADiv1
题意:
规定两种操作,一种是在字符串的末尾添加A,另一种是在末尾添加B然后反转字符串。现在给你一个起始串,一个终点串,然后问你是否能够通过以上两种操作,从起始串变为终点串。
题解:
将问题反过来考虑,那么问题就变为了是否能够从终点串变为起始串。令起始串为s,终点串为t。
首先考虑串t就是串s的子串,那么这个子串的前面的B的数量一定要和这个子串后面的B的数量相同,这是因为,只有相同的时候才能消掉。并且如果第一字符不是B,且匹配的位置不是在第一个,那么第一次的反转就无法成功,即s前面的那些A是消不掉的。
第二种情况就是t的反转时s的子串,做法和前面相似,只是判断条件变为了子串前面的B的数量要比后面的B的数量小1。
代码:
#include<iostream>
#include<cstring>
#include<vector>
#include<algorithm>
#include<string>
using namespace std; class ABBADiv1 {
public:
string canObtain(string initial, string target) {
string s = initial, t = target;
int pos = -;
while (true) {
pos = t.find(s, pos + );
if (pos == t.npos)break;
int B0 = , B1 = ;
for (int i = ; i < pos; i++)if (t[i] == 'B')B0++;
for (int i = pos + s.length(); i < t.length(); i++)if (t[i] == 'B')B1++;
if (B0 == B1) {
if (pos == )return "Possible";
else if (t[] == 'B')return "Possible";
}
}
reverse(s.begin(), s.end());
pos = -;
while (true) {
pos = t.find(s, pos + );
if (pos == t.npos)break;
int B0 = , B1 = ;
for (int i = ; i < pos; i++)if (t[i] == 'B')B0++;
for (int i = pos + s.length(); i < t.length(); i++)if (t[i] == 'B')B1++;
if (B0 == B1 + && t[] == 'B')
return "Possible";
}
return "Impossible";
}
};
Topcoder SRM 663 DIV 1的更多相关文章
- TopCoder SRM 560 Div 1 - Problem 1000 BoundedOptimization & Codeforces 839 E
传送门:https://284914869.github.io/AEoj/560.html 题目简述: 定义"项"为两个不同变量相乘. 求一个由多个不同"项"相 ...
- TopCoder SRM 667 Div.2题解
概览: T1 枚举 T2 状压DP T3 DP TopCoder SRM 667 Div.2 T1 解题思路 由于数据范围很小,所以直接枚举所有点,判断是否可行.时间复杂度O(δX × δY),空间复 ...
- [topcoder]SRM 646 DIV 2
第一题:K等于1或者2,非常简单.略.K更多的情况,http://www.cnblogs.com/lautsie/p/4242975.html,值得思考. 第二题:http://www.cnblogs ...
- [topcoder]SRM 633 DIV 2
第一题,http://community.topcoder.com/stat?c=problem_statement&pm=13462&rd=16076 模拟就可以了. #includ ...
- TopCoder SRM 596 DIV 1 250
body { font-family: Monospaced; font-size: 12pt } pre { font-family: Monospaced; font-size: 12pt } P ...
- Topcoder SRM 656 (Div.1) 250 RandomPancakeStack - 概率+记忆化搜索
最近连续三次TC爆零了,,,我的心好痛. 不知怎么想的,这题把题意理解成,第一次选择j,第二次选择i后,只能从1~i-1.i+1~j找,其实还可以从j+1~n中找,只要没有被选中过就行... [题意] ...
- Topcoder SRM 648 (div.2)
第一次做TC全部通过,截图纪念一下. 终于蓝了一次,也是TC上第一次变成蓝名,下次就要做Div.1了,希望div1不要挂零..._(:зゝ∠)_ A. KitayutaMart2 万年不变的水题. # ...
- topcoder srm 663 div1
problem1 link 每次枚举$S$的两种变化,并判断新的串是否是$T$的子串.不是的话停止搜索. problem2 link 首先考慮增加1个面值为1的硬币后,$ways$数组有什么变化.设原 ...
- 【topcoder SRM 702 DIV 2 250】TestTaking
Problem Statement Recently, Alice had to take a test. The test consisted of a sequence of true/false ...
随机推荐
- Storm: 遇到问题总结
1.没有ack : kafkaspout id 重复导致每次读最新没有数据. 2.由于storm提供的读取kafka的enternal工具存在bug,导致重复读取数据,致使数据不准确.storm bu ...
- P2485 [SDOI2011]计算器
P2485 [SDOI2011]计算器 题目描述 你被要求设计一个计算器完成以下三项任务: 1.给定y.z.p,计算y^z mod p 的值: 2.给定y.z.p,计算满足xy ≡z(mod p)的最 ...
- 59、小米电视安装apk(无u盘操作)
第一步 打开电视或者盒子,找到应用商店 第二步 打开应用商店 第三步.打开应用商店后,找到用户,别切换到快捷安装 第四步.记住地址,使用在同一网络下的电脑打开此网页 第五步.页面效果如图 第六步.找到 ...
- 无法启动此程序,因为计算机中丢失OgreMain_d.dll。尝试重新安装该程序以解决此问题。
这个问题很奇怪啊,不明白什么原因? 打开VS2010,打开项目,运行,就提示”无法启动此程序,因为计算机中丢失OgreMain_d.dll.尝试重新安装该程序以解决此问题.“ 然后就去配置环境变量,包 ...
- STL 里面的几个容器简叙
出处:http://blog.csdn.net/niushuai666/article/details/6654951 list1.list的成员函数push_back()把一个对象放到一个list的 ...
- 三种框架对比react vue 和Angular对比
https://blog.csdn.net/runOnWay/article/details/80103880 angular 优点 背靠谷歌 使用typescript 便于后端人员开发上手 完整 不 ...
- MyEclipse断点调试方法
MyEclipse断点调试方法 最基本的操作是: 1, 首先在一个java文件中设断点,然后运行,当程序走到断点处就会转到debug视图下, 2, F5键与F6键均为单步调试,F5是step into ...
- sqlserver把bak备份还原到另一个数据库
1.新建数据库aa 2.选择还原数据库,在选项下选择“覆盖现有数据库”即可
- nyoj 1282 部分和问题
部分和问题(入门题) 时间限制:1000 ms | 内存限制:65535 KB 难度:0 描述 给你n个数(a1,a2,a3.......an) ,是否存在某一些数字加起来等于k,有就输出 & ...
- win8中写好的程序,在win7中没办法运行
没有安装相应版本的,net framework win8自带4.0 win7自带2.0 所以4.0及其以上的程序在win7跑必须安装4.0及其以上版本的framework