Codeforces Round #506 (Div. 3) 题解
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) 题解的更多相关文章
- Codeforces Round #182 (Div. 1)题解【ABCD】
Codeforces Round #182 (Div. 1)题解 A题:Yaroslav and Sequence1 题意: 给你\(2*n+1\)个元素,你每次可以进行无数种操作,每次操作必须选择其 ...
- Codeforces Round #506 (Div. 3) D-F
Codeforces Round #506 (Div. 3) (中等难度) 自己的做题速度大概只尝试了D题,不过TLE D. Concatenated Multiples 题意 数组a[],长度n,给 ...
- Codeforces Round #608 (Div. 2) 题解
目录 Codeforces Round #608 (Div. 2) 题解 前言 A. Suits 题意 做法 程序 B. Blocks 题意 做法 程序 C. Shawarma Tent 题意 做法 ...
- Codeforces Round #525 (Div. 2)题解
Codeforces Round #525 (Div. 2)题解 题解 CF1088A [Ehab and another construction problem] 依据题意枚举即可 # inclu ...
- Codeforces Round #528 (Div. 2)题解
Codeforces Round #528 (Div. 2)题解 A. Right-Left Cipher 很明显这道题按题意逆序解码即可 Code: # include <bits/stdc+ ...
- Codeforces Round #506 (Div. 3) E
Codeforces Round #506 (Div. 3) E dfs+贪心 #include<bits/stdc++.h> using namespace std; typedef l ...
- Codeforces Round #466 (Div. 2) 题解940A 940B 940C 940D 940E 940F
Codeforces Round #466 (Div. 2) 题解 A.Points on the line 题目大意: 给你一个数列,定义数列的权值为最大值减去最小值,问最少删除几个数,使得数列的权 ...
- Codeforces Round #677 (Div. 3) 题解
Codeforces Round #677 (Div. 3) 题解 A. Boring Apartments 题目 题解 简单签到题,直接数,小于这个数的\(+10\). 代码 #include &l ...
- Codeforces Round #665 (Div. 2) 题解
Codeforces Round #665 (Div. 2) 题解 写得有点晚了,估计都官方题解看完切掉了,没人看我的了qaq. 目录 Codeforces Round #665 (Div. 2) 题 ...
随机推荐
- Scrapy之CrawlSpider
问题:如果我们想要对某一个网站的全站数据进行爬取?解决方案: 1. 手动请求的发送 2. CrawlSpider(推荐) CrawlSpider概念:CrawlSpider其实就是Spider的一个子 ...
- mybatis动态列名
mybatis动态列名 <select id="getUser" resultType="java.util.Map" parameterType=&qu ...
- 【Android开发】 HttpURLConnection.getOutputStream() IO异常
HttpURLConnection.getOutputStream() IO异常百度下,没找到想要的答案.网上的解决方案几乎都是从权限考虑的~最后找到个国外网站上找到答案~ http://stack ...
- 为什么我要放弃javaScript数据结构与算法(第二章)—— 数组
第二章 数组 几乎所有的编程语言都原生支持数组类型,因为数组是最简单的内存数据结构.JavaScript里也有数组类型,虽然它的第一个版本并没有支持数组.本章将深入学习数组数据结构和它的能力. 为什么 ...
- 基于Ubuntu Server 16.04 LTS版本安装和部署Django之(一):安装Python3-pip和Django
近期开始学习基于Linux平台的Django开发,想配置一台可以发布的服务器,经过近一个月的努力,终于掌握了基于Apache和mod-wsgi插件的部署模式,自己也写了一个教程,一是让自己有个记录,二 ...
- Hibernate-ORM:12.Hibernate中的多对多关联关系
------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 本篇博客将讲述Hibernate中的多对多关联关系的操作,准备的篇幅较少,望海涵 一,讲述多对多 多对多的关联 ...
- springmvc基础篇—掌握三种控制器
上一篇文章中我们讲过了处理器的映射,接下来我们来一起学习下springmvc的控制器吧. 首先咱们先创建一个咱们用来测试的实体(model)类: package cn.cfs.springmvc.do ...
- Python 3基础教程20-Python中导入模块和包
本文介绍Python中导入模块和包 #目录: # 导入模块和包--- # | # 上级包.上级模块.导入模块和包的init模块----- # | # 同级包.同级模块.上级包的init模块.test模 ...
- golang模拟新浪微博登录
1.基于幽灵蛛pholcus开源项目的规则 直接贴代码,代码可以更改后用于其他爬虫项目 package pholcus_lib // 基础包 import ( // "github.com/ ...
- libevent显式调用事件处理
) { SearchAcceptListen2(p_ev_arg->listen_fd,,¬ify_event,base); event_base_loop(base, EVLOO ...