Codeforces Round #658 (Div. 2)

A - Common Subsequence

最短相同子序列长度肯定为1,如果一个元素都不相等之间不存在相同子序列

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#define debug(x) cout<<#x<<": "<<x<<" "
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=1010;
int n,m;
int a[N],b[N];
bool st[N];
int main()
{IO;int T;cin>>T;while(T--){memset(st,0,sizeof st);cin>>n>>m;for(int i=0;i<n;i++){cin>>a[i];st[a[i]]=1;}bool flag=0;for(int i=0;i<m;i++) cin>>b[i];for(int i=0;i<m;i++)if(st[b[i]]) {flag=1;cout<<"YES"<<endl;cout<<1<<" "<<b[i]<<endl;break;}if(!flag) cout<<"NO"<<endl;}return 0;
}

B - Sequential Nim

看到这题以为是普通的Nim游戏,发现写出来不对(最后发现看错题了-.-
想赢必须拿到最后一堆(n)石子,要拿到最后一堆,如果n-1堆石子个数为1,那么必须拿到n-2堆石子,如果n-1堆石子个数大于1,只需要拿到n-1堆石子(留一个让对方拿就赢了)。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#define debug(x) cout<<#x<<": "<<x<<" "
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=100010;
int a[N],n;
int main()
{IO;int T;cin>>T;while(T--){cin>>n;for(int i=1;i<=n;i++) cin>>a[i];int j;for(j=n;j>1;){if(a[j-1]>1) j--;else j-=2;}if(j==0) cout<<"Second"<<endl;else cout<<"First"<<endl;}return 0;
}

C1 - Prefix Flip (Easy Version)

每次把a最后那个用第一个使之与b对应,模拟。时间复杂度O(n2)O(n^2)O(n2)

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#define debug(x) cout<<#x<<": "<<x<<" "
#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<vector>
using namespace std;
int n;
void calc(string &a,int pos)
{for(int i=0;i<pos;i++){if(a[i]=='1') a[i]='0';else a[i]='1';}reverse(a.begin(),a.begin()+pos);
}
int main()
{IO;int T;cin>>T;while(T--){cin>>n;;vector<int> res;string a,b;cin>>a>>b;for(int i=n-1;i;i--){if(a[i]==b[i]) continue;if(a[0]==b[i]) {res.push_back(1);if(a[0]=='1') a[0]='0';else a[0]='1';}res.push_back(i+1);calc(a,i+1);}if(a[0]!=b[0]) res.push_back(1);cout<<res.size()<<" ";for(auto t:res) cout<<t<<" ";cout<<endl;}return 0;
}

C2 - Prefix Flip (Hard Version)

以为只需要把变换那一步打个标记就能过,可惜reverse的时间复杂度好像是O(n)O(n)O(n)下面代码还是T

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#define debug(x) cout<<#x<<": "<<x<<" "
#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<vector>
using namespace std;
int n;
int main()
{IO;int T;cin>>T;while(T--){cin>>n;int cnt=0;vector<int> res;string a,b;cin>>a>>b;for(int i=n-1;i;i--){if(cnt%2==0&&a[i]==b[i]||cnt%2==1&&a[i]!=b[i]) continue;if(cnt%2==0&&a[0]==b[i]||cnt%2==1&&a[0]!=b[i]) res.push_back(1);res.push_back(i+1);reverse(a.begin(),a.begin()+i+1);//这一步非常占时间cnt++;}if(cnt%2==0&&a[0]!=b[0]||cnt%2==1&&a[0]==b[0]) res.push_back(1);cout<<res.size()<<" ";for(auto t:res) cout<<t<<" ";cout<<endl;}return 0;
}

后来想了想发现reverse这一步并不容易用打标记的方法,看了题解之后发现这种方法貌似不能在一个较优的时间复杂度解决此问题。
正解①先把a所有字符变成相同的字符(全是0或者全是1)②从后向前扫描b简单操作即可。时间复杂度O(n)O(n)O(n)大佬博客
正确代码

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#define debug(x) cout<<#x<<": "<<x<<" "
#include<iostream>
#include<algorithm>
#include<cstring>
#include<string>
#include<vector>
using namespace std;
int n;
int main()
{IO;int T;cin>>T;while(T--){cin>>n;int cnt=0;vector<int> res;string a,b;cin>>a>>b;for(int i=1;i<n;i++)if(a[i]!=a[i-1]) res.push_back(i);char now=a[n-1];//最终a中所有字符应该是nowfor(int i=n-1;i>=0;i--)if(now!=b[i]) {res.push_back(i+1);now=(now=='0'?'1':'0');}cout<<res.size()<<" ";for(auto t:res) cout<<t<<" ";cout<<endl;}return 0;
}

D. Unmerge

对于这种题要求a满足b也满足只需要考虑一种情况,我们不妨考虑最终a串是否满足题意。
4 3 2 5 1 11 9 12 8 6 10 7对于样例可以发现4 3 25 111 912 8 6 10 7这些子串被绑定在一起,要么全部属于a,要么全部属于b,也就是对于a可以选择这些也可以不选择这些,明显这是个01背包问题。把这些子串看出一个整体作为一个物品,物品价值和题解等于子串长度,那么原问题可以转化为对于体积容量为n的背包是否能够存在价值为n拼凑方法。

#define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0)
#define debug(x) cout<<#x<<": "<<x<<" "
#include<iostream>
#include<algorithm>
using namespace std;
int n;
const int N=4010;
int v[N],idx,f[N];
int last;
void init()
{for(int i=0;i<=2*n;i++) f[i]=v[i]=0;last=idx=0;
}
int main()
{IO;int T;cin>>T;while(T--){init();cin>>n;for(int i=0;i<2*n;i++){int x;cin>>x;if(x>last){idx++;last=x;}v[idx]++;}for(int i=1;i<=idx;i++)for(int j=n;j>=v[i];j--) f[j]=max(f[j],f[j-v[i]]+v[i]);if(f[n]==n) cout<<"YES"<<endl;else cout<<"NO"<<endl;}return 0;
}

要加油哦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/319716.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【树链剖分】染色(luogu 2486/金牌导航 树链剖分-3)

正题 luogu 2486 金牌导航 树链剖分-3 题目大意 给你一棵树&#xff0c;让你进行以下操作&#xff1a; 1.把一条路径染上一个颜色 2.查询一条路径上有多少个颜色段 解题思路 用树链剖分把问题转化为链上问题 然后维护一下左右端点颜色和颜色总数就好了 代码 #include<c…

小小粉刷匠

来源&#xff1a;牛客网&#xff1a; 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 32768K&#xff0c;其他语言65536K 64bit IO Format: %lld题目描述 “lalala,我是一个快乐的粉刷匠”,小名一边快活地唱着歌,一边开心地刷着墙",兴致突…

P5363-[SDOI2019]移动金币【阶梯博弈,dp,组合数学】

正题 题目链接:https://www.luogu.com.cn/problem/P5363 题目大意 1n1\times n1n的网格上有mmm个硬币&#xff0c;两个人轮流向前移动一个硬币但是不能超过前一个硬币&#xff0c;无法移动者输。 求有多少种情况先手必胜。 解题思路 竟然有我会的题&#xff0c;我感动 位置做…

M-SOLUTIONS Programming Contest 2020总结

A - Kyu in AtCoder 直接模拟 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #define debug(x) cout<<#x<<": "<<x<<" " #include<iostream> #include<algorithm> using namespace std; int main(…

Emit动态代理.NetCore迁移之旅

前言】前面我们介绍了Aop 从静态代理到动态代理&#xff1a;https://www.cnblogs.com/7tiny/p/9657451.html我们在.NetFramework平台下使用微软提供的Emit技术实现了动态代理类的生成。但是.NetCore作为微软.Net平台的春天&#xff0c;如果类库光支持.NetFramework&#xff0c;…

【LCT】弹飞绵羊(luogu 3203/金牌导航 LCT-2)

正题 luogu 3203 金牌导航 LCT-2 题目大意 给你n个格子&#xff0c;当你在第i个格子时&#xff0c;可以往后跳aia_iai​格&#xff0c;让你进行几下操作&#xff1a; 1.修改第i个数 2.查询在第i个格子跳多少下会跳出界 解题思路 往后跳相当于连接格子&#xff0c;由此建立一…

【每日一题】7月15日题目精讲—生日快乐

【每日一题】7月15日题目精讲—生日快乐 [SCOI2009]生日快乐 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 windy的生日到了&#xff0c;为了庆祝生日&#xff0c;他的朋友…

P1712-[NOI2016]区间【线段树,尺取法】

正题 题目链接:https://www.luogu.com.cn/problem/P1712 题目大意 nnn个区间&#xff0c;求出其中mmm个区间使得它们有覆盖同一个点且最长区间长度减去最短长度最小。 解题思路 因为是最接近的mmm个&#xff0c;考虑一种叫尺取法的做法。 先把区间按照长度排序&#xff0c;每…

Codeforces Round #659 (Div. 2)

日常爆零掉分wa A. Common Prefixes 根据前一个字符串构造后一个字符串&#xff0c;从哪不同就从哪换 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #define debug(x) cout<<#x<<": "<<x<<" " #include<i…

asp.net core结合Gitlab-CI实现自动化部署

一、前言在之前的文章中写过k8sJenkinsGitLab-自动化部署asp.net core项目 的topic&#xff0c;这次讲解一下gitlab-ci的CI/CD&#xff0c;说实话&#xff0c;自动化部署是在是非常的舒服&#xff0c;而且gitlab-ci很适合中小项目的部署&#xff0c;大项目推荐使用k8s。阅读目录…

【LCT】城市旅行(luogu 4842/金牌导航 LCT-3)

正题 luogu 4842 金牌导航 LCT-3 题目大意 给你一棵树&#xff0c;让你进行一些操作&#xff1a; 1.删除一条边 2.连接一条边 3.给一条路径上的点加上x 4.给出一条路径&#xff0c;在该路径选取两个点&#xff0c;求这两个点之间路径的权值和的期望值 解题思路 该树可以用LC…

P6329-[模板]点分树 | 震波

正题 题目链接:https://www.luogu.com.cn/problem/P6329 解题思路 给出nnn个点的一棵树&#xff0c;每个点有权值&#xff0c;有mmm次操作 修改一个点xxx的权值为yyy询问距离点xxx不超过kkk的所有点点权和 解题思路 点分树的模板题&#xff0c;先点分治构造出点分树&#x…

Codeforces Round #660 (Div. 2)

A - Captain Flint and Crew Recruitment 刚开始还想筛法求质数&#xff0c;最后发现是个脑筋急转弯 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #define debug(x) cout<<#x<<": "<<x<<" " #include<ios…

[译]ABP vNext介绍

译者注ASP.NET Boilerplate是.Net平台非常优秀的一个开源Web应用程序框架,在国内也有大量的粉丝.近日, 本人在github上闲逛, 发现ASP.NET Boilerplate团队又悄悄的建立了一个新项目: ABP vNext从名称可以看出来, 这是ASP.NET Boilerplate的下一代框架. 那么, 为什么要开发这个新…

[HAOI2008]玩具取名

[HAOI2008]玩具取名 文章目录题目描述输出描述:题解代码&#xff1a;时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 某人有一套玩具&#xff0c;并想法给玩具命名。首先他选…

【KMP】重复子串(ybtoj KMP-2)

正题 ybtoj KMP-2 题目大意 问你一个字符串最多由多少个相同的字符串组合而成 解题思路 如下图&#xff0c;先用KMP求出nx数组&#xff0c;那么有1∼nxn1\sim nx_n1∼nxn​和(n−nxn)∼n(n-nx_n)\sim n(n−nxn​)∼n相匹配 不难推出1∼(n−nxn)1\sim (n-nx_n)1∼(n−nxn​)…

P6624-[省选联考2020A卷]作业题【矩阵树定理,欧拉反演】

正题 题目链接:https://www.luogu.com.cn/problem/P6624 题目大意 nnn个点的一张图&#xff0c;每条边有权值&#xff0c;一棵生成树的权值是所有边权和乘上边权的gcdgcdgcd&#xff0c;即 val(T)(∑i1n−1wei)gcd⁡(we1,we2,…,wen−1)val(T)\left(\sum\limits_{i1}^{n-1} w_…

C# 8小特性

对于C# 8&#xff0c;有吸引了大多数注意力的重大特性&#xff0c;如默认接口方法和可空引用&#xff0c;也有许多小特性被考虑在内。本文将介绍几例可能加入C#未来版本的小特性。新的赋值运算符&#xff1a;&&和||从第一个版本开始&#xff0c;C#就支持把等号和另外一…

[HAOI2016]字符合并(ing)

[HAOI2016]字符合并 时间限制&#xff1a;C/C 1秒&#xff0c;其他语言2秒 空间限制&#xff1a;C/C 262144K&#xff0c;其他语言524288K 64bit IO Format: %lld题目描述 有一个长度为 n 的 01 串&#xff0c;你可以每次将相邻的 k 个字符合并&#xff0c;得到一个新的字符并…

AtCoder Beginner Contest 174 总结

这次做了ABDF。我也不知道我怎么做的&#xff08;乱做-.- A - Air Conditioner 签到题1 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #define debug(x) cout<<#x<<": "<<x<<" " #include<iostream> #…