Codeforces Round #506 (Div. 3) A-C
CF比赛题解(简单题)
简单题是指自己在比赛期间做出来了
A. Many Equal Substrings
题意
- 给个字符串t,构造一个字符串s,使得s中t出现k次;s的长度最短
- 如t="cat",k=3, minlen(s)=9,s=catcatcat
- 1<=len(t),k<=50
题解
- 稍加思考是个前缀等于后缀的问题,用kmp的next数组模板
- 假设t[0..l-1]==t[n-l....n-1]
- 那么应该不断重复t[l...n-1]这样的子串
- 代码如下(应该好好记住kmp模板,自己还有点慌张)
#include<bits/stdc++.h>
int n,k;
char t[52];
int next[52];
char tar[2510];
//前缀和后缀相等
void kmp_next(int m,char x[]){
int i,j;
j=next[0]=-1;
i=0;
while(i<m){
while(-1!=j &&x[i]!=x[j]) j=next[j];
next[++i]=++j;
}
}
void db(){
printf("db:\n");
for(int i=0;i<=n;i++){
printf("%d\t",next[i]);
}
}
int main(){
scanf("%d %d",&n,&k);
scanf("%s",t);
kmp_next(n,t);
int prefix=next[n];//[0..prefix-1] == [n-1-prefix+1,n-1]
//repeat [prefix...n-1]
//printf("db pre:%d\n",prefix);
int q=0;
for(int i=0;i<prefix;i++){
tar[i]=t[i];
q++;
}
for(int j=0;j<k;j++){
for(int m=prefix;m<n;m++){
tar[j*(n-prefix)+m]=t[m];
q++;
}
}
tar[q]='\0';
printf("%s\n",tar);
return 0;
}
B. Creating the Contest
题意
- 从单调增数组a[]选取子序列b[],满足b[i]*2>=b[i+1],最大化子序列长度
- 需要稍加分析,即通过a[j+1]>2*a[j]这样的条件将a[]分成几段,选取最长一段即可
- cf似乎常常中意这些稍加思考问题变得简单的题目呢
代码
#include<bits/stdc++.h>
int a[200010];
int n;
int solve(){
int res=1;
int b=1;
for(int i=2;i<=n;i++){
if(a[i]>2*a[i-1]){
res=std::max(i-b,res);
b=i;
}
}
res=std::max(n+1-b,res);
return res;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
printf("%d",solve());
return 0;
}
C. Maximal Intersection
题意
- 给出[ai,bi]这样的线段n条,求删除一条后使得剩下(n-1)条线段重叠区域最长
- n<=3*1e5
- 思考线段重叠区域min(bi)-max(ai),考虑删除后的影响可以得到这样的方案
- 排序a[],b[],记作sa[],sb[],遍历之前的每一条边,处理这样情况
- a[i]==sa[n]
- b[i]==sb[1]
代码
#include<bits/stdc++.h>
const int maxn=300010;
int x1[maxn],x2[maxn];
int a[maxn],b[maxn];
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d%d",&x1[i],&x2[i]);
a[i]=x1[i];b[i]=x2[i];
}
std::sort(x1+1,x1+1+n);
std::sort(x2+1,x2+1+n);
int maxv=0;
for(int i=1;i<=n;i++){
int max1=x1[n];
int min2=x2[1];
if(a[i]==max1) max1=x1[n-1];
if(b[i]==min2) min2=x2[2];
//printf("db %d %d %d\n",max1,min2,min2-max1);
maxv=std::max(min2-max1,maxv);
}
printf("%d\n",maxv);
return 0;
}
感想
- 成为了3题选手,也没有fst,虽然是div3,但毕竟涨rating,自己还是太渣
- cf的数据真的很严格,边界一定会照顾到,一定要算时间复杂度
- 继续努力吧
- div3可以在赛后时间Hack,div1/div2只能在比赛时Hack;自己还没尝试hack滋味
Codeforces Round #506 (Div. 3) A-C的更多相关文章
- Codeforces Round #506 (Div. 3) 题解
Codeforces Round #506 (Div. 3) 题目总链接:https://codeforces.com/contest/1029 A. Many Equal Substrings 题意 ...
- Codeforces Round #506 (Div. 3) D-F
Codeforces Round #506 (Div. 3) (中等难度) 自己的做题速度大概只尝试了D题,不过TLE D. Concatenated Multiples 题意 数组a[],长度n,给 ...
- Codeforces Round #506 (Div. 3) E
Codeforces Round #506 (Div. 3) E dfs+贪心 #include<bits/stdc++.h> using namespace std; typedef l ...
- Codeforces Round #506 (Div. 3)
题解: div3水的没有什么意思 abc就不说了 d题比较显然的就是用hash 但是不能直接搞 所以我们要枚举他后面那个数的位数 然后用map判断就可以了 刚开始没搞清楚数据范围写了快速乘竟然被hac ...
- Codeforces Round #506 (Div. 3) D. Concatenated Multiples
D. Concatenated Multiples You are given an array aa, consisting of nn positive integers. Let's call ...
- Codeforces Round #506 (Div. 3) C. Maximal Intersection
C. Maximal Intersection time limit per test 3 seconds memory limit per test 256 megabytes input stan ...
- Codeforces Round #506 (Div. 3) - D. Concatenated Multiples(思维拼接求是否为k的倍数)
题意 给你N个数字和一个K,问一共有几种拼接数字的方式使得到的数字是K的倍数,拼接:“234”和“123”拼接得到“234123” 分析: N <= 2e5,简单的暴力O(N^2)枚举肯定超时 ...
- 【Codeforces Round #506 (Div. 3) 】
A:https://www.cnblogs.com/myx12345/p/9844334.html B:https://www.cnblogs.com/myx12345/p/9844368.html ...
- Codeforces Round #506 (Div. 3)B.Creating the Contest(dp)
B. Creating the Contest time limit per test 1 second memory limit per test 256 megabytes input stand ...
随机推荐
- JXLS生成excel并自定义单元格样式
本人最近需要每天统计数据表,并每周一发送统计结果的邮件,所以写了个springboot老自动完成工作.项目地址为:https://github.com/707293891/springboot 其中某 ...
- Codeforces Round #468 (Div. 2, based on Technocup 2018 Final Round)C. Laboratory Work
Anya and Kirill are doing a physics laboratory work. In one of the tasks they have to measure some v ...
- 【BZOJ1367】【Baltic2004】sequence - 可合并堆
题意: 题解: 其实这是道水题啦……只不过我没做过而已 先考虑构造不严格递增序列,考虑原序列中的一段下降区间,显然区间中的$z$全取中位数最优: 那么可以把原序列拆成很多个下降序列,从头到尾加入原序列 ...
- IOS让自定义类是用下标
在ios中,有个非常有用的特性,就是可以为自己写的类增加下标访问功能. 如果我们自己的类中有个数组items,我们想直接给类加下标的方式来访问这个数组的元素,就像访问系统的数组一样,其实只要增加一个方 ...
- ORA-12560: TNS: 协议适配器错误(oracle service 已启动)
如果是安装完 oracle 客户端之后才出现的这个问题,请往下看 安装 oracle client 时,会配置一个客户端的监听,如果电脑上之前安装过 oracle service 就会和服务的监听冲突 ...
- JavaScript(DOM编程三)
节点的移动,insertBefore <body> <p>你喜欢哪个城市?</p> <ul id="city"><li id= ...
- 工具-VS常用快捷键
项目管理: Ctrl+Shift+N: 新建项目 Ctrl+Shift+O: 打开项目 Ctrl+Shift+S: 全部保存 Shift+Alt+C: 新建类 Ctrl+Shift+A: 新建项 Sh ...
- Qt Quick 之 QML 与 C++ 混合编程具体解释
Qt Quick 技术的引入.使得你能够高速构建 UI ,具有动画.各种绚丽效果的 UI 都不在话下.但它不是万能的.也有非常多局限性,原来 Qt 的一些技术,比方低阶的网络编程如 QTcpSocke ...
- HDU 4351
求某区间各个子集的和的根的最大的五个数. 子集根其实就是这个数模9后的余数,注意的是要区分0和9,两者的余数都是0.. 记录前i个数的和的根,设为sum数组,然后处理两个数组 lft[i][j]表示从 ...
- Java之旅--Web.xml解析
Windows的IIS,是用UI界面进行网站的配置.Linux以下的差点儿全部系统,都是使用配置文件来进行配置,Java容器(JBoss/Tomcat/Jetty/WebSphere/WebLogic ...