重庆分公司,新征程启航

为企业提供网站建设、域名注册、服务器等服务

Codeforces CodeTON Round 2 (Div. 1 + Div. 2, Rated, Prizes!) A-D 题解

A. Two 0-1 Sequences

 大致翻译:

创新互联建站服务项目包括海晏网站建设、海晏网站制作、海晏网页制作以及海晏网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,海晏网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到海晏省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!

两个长度为n和m的二进制序列a和b(题目保证n >= m)

两个操作:

op1:改变a(2) 为min(a(1), a(2)),并且移除a(1)

op2:改变a(2) 为max(a(1), a(2)),并且移除a(1)

每次操作后,原先的a(i)变成a(i + 1), 长度减少1,即前移。

  a二进制序列能否通过这两个操作变成b二进制序列?

解题思路:刚开始想的是判断a2后缀跟a1后缀是否相同,再判断,a1前面有没有1和0(因为有1和0,就表示op1和op2可以随意完成)。写的时候又陆陆续续发现需要几个特判,想a1长度为1等。

于是就debug,慢慢发现只要前面有a2的第一个数字,并且后缀相同就可以对了。最终写出来了。

不过我写的查找是自己造轮子,我发现大佬就是用stl中的count()来写的,就拿过来改进了改进自己的code

#include 
#include
#include<string>
#include<set>
#include
#include
#include
using namespace std;
 
#define rep(i,x,n) for(int i = x; i <= n; i++)
 
typedeflong long LL;
typedef pair<int,int> PII;
 
const int N = ;
 
void solve() {
int n, m;
    cin>>n>>m;
string a, b;
    cin>>a>>b;
if(a.substr(n-m+1) == b.substr(1) && count(a.begin(), a.begin() +n - m + 1, b[0])) {
        puts("YES");
    }else puts("NO");
}
void test();
int main()
{
int n;
    cin>>n;
while(n--) solve();
 
return 0;
}

当前标题:Codeforces CodeTON Round 2 (Div. 1 + Div. 2, Rated, Prizes!) A-D 题解
网页网址:http://cqcxhl.com/article/dsoiggp.html

其他资讯

在线咨询
服务热线
服务热线:028-86922220
TOP