Codeforces Round #506 (Div. 3)

题目总链接:https://codeforces.com/contest/1029

A. Many Equal Substrings

题意:

给出长度为n的字符串,然后要求你添加一些字符,使得有k个这样的字符串。

题解:

直接暴力吧...一个指针从1开始,另一个从2开始,逐一比较看是否相同;如果不同,第一个指针继续回到1,第二个指针从3开始...就这么一直重复。最后如果第二个指针能够顺利到最后一位,那么记录当前的第一个指针,把他后面的串取出来添加k-1个就ok了。

代码如下:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = ;
string s;
int n,k;
int main(){
cin>>n>>k;
cin>>s;
int fir = ,last = ;
for(int i=;i<n;i++){
if(s[fir]==s[i]) fir++;
else if(fir) fir = ,i=last+,last=i;
}
string tmp = s.substr(fir,n);
for(int i=;i<k;i++) s+=tmp;
cout<<s;
return ;
}

B. Creating the Contest

题意:

给出n个数,选出最长的区间,满足区间中的相邻两个数a,b有2*a>=b且a<b。

题解:

枚举+判断一下就ok了。

代码如下:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll ;
const int N = 2e5+;
ll a[N];
int n;
int main(){
scanf("%d",&n);
int l=,r=,ans=;
for(int i=;i<=n;i++) scanf("%d",&a[i]);
for(int i=;i<=n;i++){
if(a[i]<=a[i-]*){
r++;
ans=max(ans,r-l+);
}else{
l=r=i;
}
}
cout<<ans;
return ;
}

C. Maximal Intersection

题意:

给出n个区间,然后你可以任意去掉一个区间,最后求区间交集的最大值为多少。

题解:

区间的交集就是[maxl,minr]...根据这个求出前缀、后缀的l和r,然后枚举去掉哪个区间就行了。注意一下这里区间的交集是所有区间的交集。

代码如下:

#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll;
const int N = 3e5+;
int n;
struct line{
int l,r;
}p[N];
int prel[N],prer[N],sufl[N],sufr[N];
int main(){
scanf("%d",&n);
memset(prer,INF,sizeof(prer));
memset(sufr,INF,sizeof(sufr));
for(int i=;i<=n;i++) scanf("%d%d",&p[i].l,&p[i].r);
for(int i=;i<=n;i++){
prel[i]=max(prel[i-],p[i].l);
prer[i]=min(prer[i-],p[i].r);
}
for(int i=n;i>=;i--){
sufl[i]=max(sufl[i+],p[i].l);
sufr[i]=min(sufr[i+],p[i].r);
}
int ans = ;
for(int i=;i<=n;i++){
int l = max(prel[i-],sufl[i+]);
int r = min(prer[i-],sufr[i+]);
ans=max(ans,r-l);
}
printf("%d",ans);
return ;
}

D. Concatenated Multiples

题意:

给出n个数以及k,现在将任意两个数聚合成为一对,比如12和345聚合就为12345,问一共有多少对能被k整除。

题解:

将a,b聚合,聚合之后的数即位a*10^len(b)+b,如果满足(a*10^len(b)+b%k)==0,则有a*10^len(b)%k+b%k=k or 0。

根据这个来写就好了,最后时间复杂度为O(10*nlogn)。

代码如下:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5+;
ll n,k;
ll a[N],b[N],len[N],q[];
vector <ll> vec[];
int main(){
scanf("%I64d%I64d",&n,&k);
q[]=;
for(int i=;i<=;i++) q[i]=q[i-]*%k;
for(int i=;i<=n;i++) scanf("%I64d",&a[i]);
sort(a+,a+n+);
for(int i=;i<=n;i++) b[i]=a[i];
for(int i=;i<=n;i++){
ll x=a[i];
int cnt=;
while(x){
x/=;
cnt++;
}
len[i]=cnt;
}
for(int i=;i<=;i++){
for(int j=;j<=n;j++)
vec[i].push_back(a[j]*q[i]%k);
sort(vec[i].begin(),vec[i].end());
}
ll ans = ;
for(int i=;i<=n;i++){
b[i]%=k;
int l = len[i];
int pos1 = lower_bound(vec[l].begin(),vec[l].end(),(k-b[i])%k)-vec[l].begin();
int pos2 = upper_bound(vec[l].begin(),vec[l].end(),(k-b[i])%k)-vec[l].begin();
ans+=(pos2-pos1);
if(a[i]*q[l]%k==(k-b[i])%k)ans--;
}
printf("%I64d",ans);
return ;
}

F. Multicolored Markers

题意:

给出a和b,代表两种颜色的格子数目。现在用他们围成一个矩形,还要要求至少有一种颜色围成一个矩形。现在求最短周长为多少。

题解:

用sqrt(a+b)的时间复杂度可以求出大矩形的因子有哪些。然后枚举每个因子,再来判断一下a or b是否能在我们枚举出来的长以及宽内围成一个矩形就行了。

我的做法时间复杂度比较高,说一个时间复杂度比较低的解法吧。

就是假定我们现在来判断a是否能围成矩形,那么我们要用sqrt(a)的时间复杂度来求出所有的因子,我们把宽度从小到大来存。对于大矩形也是这样。然后如果大矩形确定了长l,宽w,那么小矩形我们就贪心得选择最大的宽w'同时满足w'<=w,那么此时l'就是最小,然后判断一下此时是否l'<=l就行了。

之后就继续增大w,重复上面的操作...最后维护一下答案就行了。

我的暴力代码..

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll a,b,c;
vector <ll> v1,v2,v3;
bool check(ll l,ll s){
ll r=s/l;
for(auto width:v2){
ll len = c/width;
if(width<=l && len<=r) return true;
}
return false;
}
int main(){
cin>>a>>b;
ll s=a+b;
c=a;
for(ll i=;i*i<=s;i++)
if(s%i==) v1.push_back(i);
for(ll i=;i*i<=c;i++)
if(c%i==) v2.push_back(i);
ll ans;
for(int i=v1.size()-;i>=;i--){
ll l=v1[i],r=s/v1[i];
if(check(l,s)){
ans = (v1[i]+s/v1[i])*;
break ;
}
}
c=b;v2.clear();
for(ll i=;i*i<=c;i++)
if(c%i==) v2.push_back(i);
for(int i=v1.size()-;i>=;i--){
ll l=v1[i],r=s/v1[i];
if(check(l,s)){
ans = min((v1[i]+s/v1[i])*,ans);
break ;
}
}
printf("%I64d",ans);
return ;
}

Codeforces Round #506 (Div. 3) 题解的更多相关文章

  1. Codeforces Round #182 (Div. 1)题解【ABCD】

    Codeforces Round #182 (Div. 1)题解 A题:Yaroslav and Sequence1 题意: 给你\(2*n+1\)个元素,你每次可以进行无数种操作,每次操作必须选择其 ...

  2. Codeforces Round #506 (Div. 3) D-F

    Codeforces Round #506 (Div. 3) (中等难度) 自己的做题速度大概只尝试了D题,不过TLE D. Concatenated Multiples 题意 数组a[],长度n,给 ...

  3. Codeforces Round #608 (Div. 2) 题解

    目录 Codeforces Round #608 (Div. 2) 题解 前言 A. Suits 题意 做法 程序 B. Blocks 题意 做法 程序 C. Shawarma Tent 题意 做法 ...

  4. Codeforces Round #525 (Div. 2)题解

    Codeforces Round #525 (Div. 2)题解 题解 CF1088A [Ehab and another construction problem] 依据题意枚举即可 # inclu ...

  5. Codeforces Round #528 (Div. 2)题解

    Codeforces Round #528 (Div. 2)题解 A. Right-Left Cipher 很明显这道题按题意逆序解码即可 Code: # include <bits/stdc+ ...

  6. Codeforces Round #506 (Div. 3) E

    Codeforces Round #506 (Div. 3) E dfs+贪心 #include<bits/stdc++.h> using namespace std; typedef l ...

  7. Codeforces Round #466 (Div. 2) 题解940A 940B 940C 940D 940E 940F

    Codeforces Round #466 (Div. 2) 题解 A.Points on the line 题目大意: 给你一个数列,定义数列的权值为最大值减去最小值,问最少删除几个数,使得数列的权 ...

  8. Codeforces Round #677 (Div. 3) 题解

    Codeforces Round #677 (Div. 3) 题解 A. Boring Apartments 题目 题解 简单签到题,直接数,小于这个数的\(+10\). 代码 #include &l ...

  9. Codeforces Round #665 (Div. 2) 题解

    Codeforces Round #665 (Div. 2) 题解 写得有点晚了,估计都官方题解看完切掉了,没人看我的了qaq. 目录 Codeforces Round #665 (Div. 2) 题 ...

随机推荐

  1. (数据科学学习手札30)朴素贝叶斯分类器的原理详解&Python与R实现

    一.简介 要介绍朴素贝叶斯(naive bayes)分类器,就不得不先介绍贝叶斯决策论的相关理论: 贝叶斯决策论(bayesian decision theory)是概率框架下实施决策的基本方法.对分 ...

  2. R语言学习笔记(十六):构建分割点函数

    选取预测概率的分割点 cutoff<- function(n,p){ pp<-1 i<-0 while (pp>=0.02) { model.predfu<-rep(&q ...

  3. 图片验证码给AI使用

    为了破解图形验证码,AI需要大量的图片数据.为了简单获取大量的图形来喂给Ai模型训练,索性自己写一把.代码来一发..   import java.awt.Color; import java.awt. ...

  4. consul 使用方式

    1.在配置文件配置好的情况下,在运行 consul agent -server -datacenter=([xacl.json].[acl_datacenter]) -bootstrap -data- ...

  5. LI 标签中让文章标题左对齐,日期右对齐的方法

    希望实现标题在左对齐,日期在右对齐,当直接给日期的span加上float:right时,IE8和FF都OK,但IE6/7则会换行,下面给出一个简单有效的解决办法. <!DOCTYPE html  ...

  6. CentOS7 添加自定义系统服务案例

    示例一: 执行脚本/root/project/systemctl/test.sh() ######################################################### ...

  7. react children技巧总结

    在使用该技巧时,建议先看一下相关的知识,点我查看 假如使用该属性时,想把父组件的所有属性及部分方法传递给子组件,该怎么办呢?看代码 const Child = ({ doSomething, valu ...

  8. spring mvc 返回xml格式数据

    1.问题 : 因为业务需要,需要发送xml格式的数据,使用spring mvc 自己解析,就不用费心去自己搞这些东西. 2.解决: 新建一个实体类,直接在实体类中添加注解即可,如下: @XmlRoot ...

  9. Ubuntu下使用Git_6

    这回真的是最后一篇了,哈哈,改写提交. 这里这部分在目前的学习阶段还没有用到,所以,这里将不在有实验的部分,在下面的链接中有详细的介绍 这也是我第一讲一个网站的内容完成的学习完成,这这部分,我讲简单的 ...

  10. 一丶人生苦短,我用python【第一篇】

    1 解释器 解释器(英语:Interpreter),又译为直译器,是一种电脑程序,能够把高级编程语言一行一行直接转译运行.解释器不会一次把整个程序转译出来,只像一位"中间人",每次 ...