题目大意:

给定两个字符串s和t,你有一个空字符串z

每次可以取s的任意一个子序列加到z后面

问至少要取多少次才能让z等价于t

解题思路:

vector存s中26个字母的位置

然后t字符串从前往后一个个查找

用变量p记录查到上一个字符时在字符串s中的位置(初始化为-1)

如果在t内碰到一个字符,没有在s中出现过,输出-1结束当次程序

否则,看当前的p是否大于等于这个字符在s中出现的最后一个位置

如果是,说明这一次子序列已经不能往后面取了,说明得另起一次从头取子序列

ans++,让p等于当前字符在s中出现的第一个位置

如果不是二分找大于p的第一个这个字符的位置,让p等于这个位置即可

注意,ans初始化为1,vector要清空……

思路用到了一点点贪心,就是每次都是取上一次的位置后出现的第一个指定字符的位置

#include<bits/stdc++.h>
using namespace std;
string s,t;
vector<int> v[];
int siz[];
inline int gid(char s){
return s-'a';
}
void solve(){
cin>>s>>t;
memset(siz,,sizeof siz);
int lens=s.size(),lent=t.size(),i,j,d,p=-,pd,ans=;
for(i=;i<;i++)
v[i].clear();
for(i=;i<lens;i++){
d=gid(s[i]);
v[d].emplace_back(i);
siz[d]++;
}
for(i=;i<lent;i++){
d=gid(t[i]);
if(siz[d]==){//这个字符没有出现过
cout<<"-1\n";
return;
}
if(p>=v[d][siz[d]-]){//如果已经没法在剩下的位置中取这个字符了,得另起一次从头开始取子序列
ans++;
p=v[d][];
}
else{//否则,二分找大于p的第一个这个字符的位置
pd=upper_bound(v[d].begin(),v[d].end(),p)-v[d].begin();
p=v[d][pd];
}
}
cout<<ans<<'\n';
}
int main(){
ios::sync_with_stdio();
cin.tie();cout.tie();
int T;cin>>T;while(T--)
solve(); return ;
}

Codeforces 1295C - Obtain The String的更多相关文章

  1. Codeforces #541 (Div2) - E. String Multiplication(动态规划)

    Problem   Codeforces #541 (Div2) - E. String Multiplication Time Limit: 2000 mSec Problem Descriptio ...

  2. Obtain The String CodeForces - 1295C binary_search+思维

    妈耶,,,被B题卡到哭,C题一发就过了... 字符串问题.首先用vector记录每个字符出现的位置,然后对字符串t的每个字符,用二分查找函数查找,注意用upper_bound查找,对于字符i,首先用变 ...

  3. Educational Codeforces Round 81 (Rated for Div. 2) C. Obtain The String

    题目链接:http://codeforces.com/contest/1295/problem/C 题目:给定字符串s,t.  给定一个空串z,需要按照规则把z构造成 string z == stri ...

  4. 【动态规划】【最短路】Codeforces 710E Generate a String

    题目链接: http://codeforces.com/problemset/problem/710/E 题目大意: 问写N个字符的最小花费,写一个字符或者删除一个字符花费A,将当前的字符数量翻倍花费 ...

  5. codeforces 632C The Smallest String Concatenation

    The Smallest String Concatenation 题目链接:http://codeforces.com/problemset/problem/632/C ——每天在线,欢迎留言谈论. ...

  6. 【Codeforces 1120C】Compress String

    Codeforces 1120 C 题意:给一个串\(S\),将这个串分成\(t_1..t_m\),如果\(t_i\)在\(t_1..t_{i-1}\)中作为子串出现过,那么这个的代价是\(b\),否 ...

  7. CodeForces - 1009B Minimum Ternary String

    You are given a ternary string (it is a string which consists only of characters '0', '1' and '2'). ...

  8. 【codeforces 797C】Minimal string

    [题目链接]:http://codeforces.com/contest/797/problem/C [题意] 一开始,给你一个字符串s:两个空字符串t和u; 你有两种合法操作; 1.将s的开头字符加 ...

  9. Codeforces 1144 E. Median String

    原题链接:https://codeforces.com/problemset/problem/1144/E tag:字符串模拟,大整数. 题意:给定两个字符串,求字典序中间串. 思路:可以把这个题当做 ...

随机推荐

  1. ROS常见问题(三) 报错are you sure it is properly registered and that the containing library is built?

    报错: [FATAL] [1576042404.913706482]: Failed to create the global_planner/GlobalPlanner planner, are y ...

  2. cf 782# A.Andryusha and Socks B.The Meeting Place Cannot Be Changed C.Andryusha and Colored Balloons

    看来快掉到灰名的蒟蒻涨rating也快... A题模拟一下就好(一开始还sb,, #include<bits/stdc++.h> #define LL long long using na ...

  3. T_SQL 将一列多行数据合并为一行

    SQL Server在进行数据迁移和报表处理的时候会遇到将一列多行数据拼接为一个字符串的情况,为了处理这个问题,在网上找了一些相关的资料,提供两种方法,供遇到类似问题的朋友们参考,也借此加深自己的印象 ...

  4. Ubuntu14.04 无法关机 SpamAssassin speech-dispatcher

    在ubuntu14.04上安装完一些包后,关闭计算机就会出现关于标题中的两个错误. 1.在软件中心卸载spamAssassin 2.运行命令: sudo update-rc.d -f speech-d ...

  5. maven详解之仓库

    在Maven中,任何一个依赖.插件或者项目构建的输出,都可以称之为构件. Maven在某个统一的位置存储所有项目的共享的构件,这个统一的位置,我们就称之为仓库.(仓库就是存放依赖和插件的地方) 任何的 ...

  6. C#获取图片的某个区域

            /// <summary>        /// http://www.cnblogs.com/KissKnife/archive/2007/10/13/923352.ht ...

  7. 吴裕雄--天生自然C++语言学习笔记:C++ 信号处理

    信号是由操作系统传给进程的中断,会提早终止一个程序.在 UNIX.LINUX.Mac OS X 或 Windows 系统上,可以通过按 Ctrl+C 产生中断. 有些信号不能被程序捕获,但是下表所列信 ...

  8. com.alibaba.druid.pool.DruidDataSource

    https://www.cnblogs.com/wuyun-blog/p/5679073.html DRUID介绍 DRUID是阿里巴巴开源平台上一个数据库连接池实现,它结合了C3P0.DBCP.PR ...

  9. Vue 改变数组触发视图更新

    最近给table做了一个点击排序的功能,数组更改以后发现data数据变了,但是视图不更新 写惯了js的我们随手一串代码 this.items[2]={message:"Change Test ...

  10. 基础语法-选择结构switch

    基础语法-选择结构switch 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Switch语句特点 switch语句选择的类型在jdk1.6只支持四种:byte,short,i ...