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. 141. 环形链表 LeetCode报错:runtime error: member access within null pointer of type 'struct ListNode'

    /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode ...

  2. Spring BindingResult验证框架Validation特殊用法

    使用注解@Valid(实体属性校验) Springboot实现 Spring实现 一.准备校验时使用的JAR validation-api-1.0.0.GA.jar:JDK的接口: hibernate ...

  3. Python | 用Pyinstaller打包发布exe应用

    参考:https://jingyan.baidu.com/article/a378c960b47034b3282830bb.html https://ask.csdn.net/questions/72 ...

  4. C++11中Lambda的使用

    Lambda functions: Constructs a closure, an unnamed function object capable of capturing variables in ...

  5. 8.Mongodb备份与恢复

    1.备份 语法 mongodump -h dbhost -d dbname -o dbdirectory -h:服务器地址,也可以指定端口号 -d:需要备份的数据库名称 -o:备份的数据存放位置,此目 ...

  6. IAR工程名修改

    修改.dep..ewd..ewp..eww四个文件的文件名 删除.ewt文件(如果存在) 记事本打开.eww文件,修改<path></path>间的.ewp文件名 打开工程,打 ...

  7. Cadence17.2下载ALTERA的FPGA封装库

    1. 在Cadence的安装目录里面找了下,发现都没有Altera的FPGA型号的函数库,下面的虽然是ALTERA,但是没有FPGA的器件封装 2. 去intel的官网看能不能下载到,INTEL网址, ...

  8. iOS开发中常见的一些异常

    iOS开发中常见的异常包括以下几种NSInvalidArgumentExceptionNSRangeExceptionNSGenericExceptionNSInternallnconsistency ...

  9. Jmeter——小性能用例

    1.添加默认值,将代理服务器写入 2.添加HTTP请求头,将域名部分用变量形式写入:${__CSVRead(D:/number.txt,0)},这是为了查询不同页面,在D:/number.txt路径下 ...

  10. 并查集——poj2492(带权并查集入门)

    一.题目回顾 题目链接:传送门 题意:给定n只虫子,不同性别的可以在一起,相同性别的不能在一起.给你m对虫子,判断中间有没有同性别在一起的. 二.解题思路 种类并查集 和poj1073的本质一样 详见 ...