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) 题 ...
随机推荐
- python2.7练习小例子(十八)
19):题目:一个数如果恰好等于它的因子之和,这个数就称为"完数".例如6=1+2+3.编程找出1000以内的所有完数. #!/usr/bin/python # -*- ...
- 详解mysql体系结构和存储引擎
概述 之前整理的一些mysql方面内容,适合做备忘,因为我基本不会去记这些概念性的东西,大家做个了解就可以了. 一.定义数据库和实例 1.数据库: 物理操作系统文件或其他形式文件类型的集合. 在MyS ...
- Android Stadio 指定文件打开类型
我们项目里面,有一个文件,叫做aaa.meta. 这个只是一个配置文件,里面是txt. 但是Android Stadio 不识别.怎么办? 设置如下图: 首先,打开Android stadio 的设置 ...
- 触发显示和隐藏 div
<script> window.onload = function(){ var oDiv1 = document.getElementById("div1"); va ...
- 在编程的时候,NotePad++ 中闪烁的光标突然有竖着闪烁的编程蓝色下划线闪烁的--小技巧告诉你-费元星
当在写代码时出现的光标闪烁(横线闪烁) 在键盘上找 Insert ,按这个Insert就可以把横向闪烁光标( _ )修改成竖向闪烁光标样式( | ),横向光标会在你写代码的时候修改前面的代码,把光标移 ...
- Windows扩展屏开发总结
本文来自网易云社区 作者:梁敏 一.多屏设置 在设置-系统-可以点击显示器1和2,可以进行单独设置: "使之成为我的主显示器"可以设置当前显示器是主屏:主屏的选择会决定整个虚拟屏幕 ...
- Java检测端口的占用情况
突然间想到这个问题,在网上搜了一下 http://blog.csdn.net/danieluk/article/details/18518175 网上有很多文章都是用上面那个方法来解决这个问题的,总感 ...
- 【紫书】(UVa12563)Jin Ge Jin Qu hao
继续战dp.不提. 题意分析 这题说白了就是一条01背包问题,因为对于给定的秒数你只要-1s(emmmmm)然后就能当01背包做了——那1s送给劲歌金曲(?).比较好玩的是这里面dp状态的保存——因为 ...
- React开发时候注意点
JSX 使用jsx的使用,用一个{}包裹起来,例如 const method = {<div> 123 </div>} 使用()小括号,防止分号自动插入 const eleme ...
- CCF-NOIP-2018 提高组(复赛) 模拟试题(九)(2018 CSYZ长沙一中)
T1 Circle [问题描述] 小 w 的男朋友送给小 w 一个 n 个点 m 条边的图,并且刁难小 w 要她找出点数最少的正环. 小 w 不会做,于是向你求助. [输入格式] 第一行两个整数\(n ...