Codeforces Round #552 (Div. 3) EFG(链表+set,dp,枚举公因数)
E
https://codeforces.com/contest/1154/problem/E
题意
一个大小为n(1e6)的数组\(a[i]\)(n),两个人轮流选数,先找到当前数组中最大的数然后选择以这个数为半径k的所有数,问两个人的选数情况
题解
- set维护剩下数的最大
- 链表维护左右第一个存在的数的位置
代码
#include<bits/stdc++.h>
#define MAXN 200005
using namespace std;
int n,k,a[MAXN],p[MAXN],L[MAXN],R[MAXN],group=0,ans[MAXN];
set<int>S;
int main(){
cin>>n>>k;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
p[a[i]]=i;
S.insert(a[i]);
L[i]=i-1;R[i]=i+1;
}
while(S.size()){
int x=*(--S.end());
int l=p[x],r=p[x],d=0;
while(d<=k&&l>=1){
//cout<<a[l]<<endl;
S.erase(a[l]);
ans[l]=group+1;
l=L[l];
d++;
}
d=0;
while(d<=k&&r<=n){
//cout<<a[r]<<endl;
S.erase(a[r]);
ans[r]=group+1;
r=R[r];
d++;
}
L[r]=l;
R[l]=r;
group^=1;
}
for(int i=1;i<=n;i++)printf("%d",ans[i]);
}
F
https://codeforces.com/contest/1154/problem/F
题意
有n个物品,你需要买k个,每个物品价格为\(a[i]\),然后m个优惠方式,买\(x[i]\)个的话最便宜的y[i]个免费
题解
- 贪心:买最便宜的k个,x相同取y最大
- 定义\(dp[i]\)为买前i个用的最少费用,\(dp[i]=min(dp[i],dp[j]+sum[i]-sum[j+of[i-j]]),0\leq j \leq i-1\)
代码
#include<bits/stdc++.h>
#define inf 0x3f3f3f3f3f3f3f3f
#define ll long long
using namespace std;
ll dp[2005],a[200005],sum[200005];
int n,m,k,x,y,of[200005];
int main(){
cin>>n>>m>>k;
for(int i=1;i<=n;i++)scanf("%lld",&a[i]);
for(int i=1;i<=m;i++){
scanf("%d%d",&x,&y);
of[x]=max(of[x],y);
}
sort(a+1,a+n+1);
k=min(n,k);
for(int i=1;i<=k;i++)sum[i]=sum[i-1]+a[i];
memset(dp,inf,sizeof(dp));
dp[0]=0;
for(int i=1;i<=k;i++)
for(int j=0;j<i;j++)
dp[i]=min(dp[i],dp[j]+sum[i]-sum[j+of[i-j]]);
cout<<dp[k];
}
G
https://codeforces.com/contest/1154/problem/G
题意
一个大小为n(1e6)的数组\(a[i]\)(1e7),问lcm(a[l],a[r])最小的l和r,l!=r
题解
- \(a[i]\)(1e7),枚举公因数位置,nlogn
代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
vector<int>G[10000005];
ll n,ans,a,b,y,A,B,x;
int main(){
cin>>n;
for(ll i=1;i<=n;i++){
scanf("%lld",&x);
if(G[x].size()<2)G[x].push_back(i);
}
ans=1e18;
a=b=0;
for(ll i=1;i<=1e7;i++){
x=y=a=b=0;
for(ll j=i;j<=1e7;j+=i){
if(a==0){
if(G[j].size()>=2){
a=G[j][0];
b=G[j][1];
x=y=j;
break;
}else if(G[j].size()){
a=G[j][0];
x=j;
}
}else if(b==0){
if(G[j].size()){
b=G[j][0];
y=j;
break;
}
}
}
if(x&&y&&a&&b&&ans>x/__gcd(x,y)*y){
ans=x/__gcd(x,y)*y;
A=a;B=b;
}
}
cout<<min(A,B)<<" "<<max(A,B);
}
Codeforces Round #552 (Div. 3) EFG(链表+set,dp,枚举公因数)的更多相关文章
- Codeforces Round #552 (Div. 3) A题
题目网址:http://codeforces.com/contest/1154/problem/ 题目意思:就是给你四个数,这四个数是a+b,a+c,b+c,a+b+c,次序未知要反求出a,b,c,d ...
- Codeforces Round #552 (Div. 3) 题解
Codeforces Round #552 (Div. 3) 题目链接 A. Restoring Three Numbers 给出 \(a+b\),\(b+c\),\(a+c\) 以及 \(a+b+c ...
- Codeforces Round #174 (Div. 1) B. Cow Program(dp + 记忆化)
题目链接:http://codeforces.com/contest/283/problem/B 思路: dp[now][flag]表示现在在位置now,flag表示是接下来要做的步骤,然后根据题意记 ...
- Codeforces Round #552 (Div. 3) F. Shovels Shop (前缀和预处理+贪心+dp)
题目:http://codeforces.com/contest/1154/problem/F 题意:给你n个商品,然后还有m个特价活动,你买满x件就把你当前的x件中最便宜的y件价格免费,问你买k件花 ...
- Codeforces Round #552 (Div. 3) F题
题目网址:http://codeforces.com/contest/1154/problem/F 题目大意:给出n,m,k,n是物体的个数,m是优惠方式的种数,k是需要购买的物体个数, 然后给出n个 ...
- Codeforces Round #552 (Div. 3) D题
题目网站:http://codeforces.com/contest/1154/problem/D 题目大意:给出n个数(0或1),还有a , b, a是蓄电池容量,b是电池容量,数为1时蓄电池可以充 ...
- Codeforces Round #552 (Div. 3) C题
题目网址:http://codeforces.com/contest/1154/problem/C 题目意思:小猫吃三种食物,A,B,C,一周吃食物的次序是,A,B,C,A,C,B,A,当小猫该天无食 ...
- Codeforces Round #552 (Div. 3) B题
题目链接:http://codeforces.com/contest/1154/problem/B 题目大意:给出n个数,每个数都可以加上或减去这个一个数D,求对这n个数操作之后当所有数都相等时,D的 ...
- Codeforces Round #552 (Div. 3)-1154E-Two Teams-(模拟+双指针)
http://codeforces.com/contest/1154/problem/E 解题: 举例n=10,k=1 1,2,10,4,7,6,9,8,5,3 第一次,1队先挑2,10,4这三个人 ...
随机推荐
- UnitTest和Developer
UnitTest对项目很重要,这是很多developer都明白的道理,可是真的让所有的developer对自己的代码写UnitTest,似乎是不可能的. developer完全可以以已经有很多task ...
- 基于SincNet的原始波形说话人识别
speaker recognition from raw waveform with SincNet Mirco Ravanelli, Yoshua Bengio 作为一种可行的替代i-vector的 ...
- 新手入门:python的安装(一)
windows下python的安装 -----因为我是个真小白,网上的大多入门教程并不适合我这种超级超级小白,有时候还会遇到各种各样的问题,因此记录一下我的安装过程,希望大家都能入门愉快,欢迎指教 - ...
- Golang面向并发的内存模型
Import Advanced Go Programming 1.5 面向并发的内存模型 在早期,CPU都是以单核的形式顺序执行机器指令.Go语言的祖先C语言正是这种顺序编程语言的代表.顺序编程语言中 ...
- CentOS 7 firewalld详解,添加删除策略
一.CentOS7中firewall防火墙 修改防火墙配置文件之前,需要对之前防火墙[/etc/firewalld/zones/public.xml]做好备份 重启防火墙后,需要确认防火墙状态和防火墙 ...
- Docker - 快速入门(一)
概念 下面这三个概念一开始可能不好理解,等大家跟着博客把例子做完了,再回头来看应该就能理解了. docker image # docker镜像 镜像就是一个只读的模板.镜像可以用来创建Docker容 ...
- 基础面试,为什么面试官总喜欢问String?
关于 Java String,这是面试的基础,但是还有很多童鞋不能说清楚,所以本文将简单而又透彻的说明一下那个让你迷惑的 String 在 Java 中,我们有两种方式创建一个字符串 String x ...
- Spring Boot 启动以后然后再加载缓存数据 CommandLineRunner
实际应用中,我们会有在项目服务启动完成以后去加载一些数据或做一些事情(比如缓存)这样的需求. 为了解决这样的问题,Spring Boot 为我们提供了一个方法,通过实现接口 CommandLineRu ...
- WPF中DataGrid在没有数据的时候也可以显示水平滚动条
今天做项目中遇到个问题,就是页面加载后默认DataGrid是不加载数据的,但是DataGrid的列很多,就导致了运行效果上,此窗口的DataGrid没有水平滚动条,类似图片的效果. 经过百度和摸索,使 ...
- Linux网络——修改配置文件
Linux网络——修改配置文件 摘要:本文主要学习了如何通过修改配置文件来设置网络参数. 配置文件 通过修改系统的配置文件为系统设置网络参数,这种方式的优点是可以永久保存,计算机重启后仍然生效.缺点是 ...