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这三个人 ...
随机推荐
- flex.css声明式布局
flex.css能完美的运行在移动端的各种浏览器,甚至能运行在ie10+的各种PC端浏览器中 flex和data-flex flex.css 有两个版本,一个是flex.css一个是data-flex ...
- 趣谈Linux操作系统学习笔记:第二十四讲
一.小内存的分配基础 1.kmem_cache_alloc_node的作用 通过这段代码可以看出,它调用了kmem_cache_alloc_node函数,在task_struct的缓存区域task_s ...
- 第04组 Beta冲刺(5/5)
队名:new game 组长博客 作业博客 组员情况 鲍子涵(队长) 过去两天完成了哪些任务 动画优化 接下来的计划 等待答辩 还剩下哪些任务 让游戏本体运行 遇到了哪些困难 时间太少了 有哪些收获和 ...
- php程序内存优化之数组操作优化
一.前言这篇文章其实是上篇文章的内存优化部分.博主的php程序在执行的时候,报错: Out of memory (allocated 364904448) (tried to allocate 262 ...
- Samba基础配置
本文环境:CentOS 7 简介 在UNIX-like之间共享文件系统主要是通过NFS实现的,而Windows之间共享文件系统主要是通过基于NetBIOS的网上邻居实现的,1984年Andrew Tr ...
- spring-framework-core-ioc Container
阅读须知 实例化bean xml方式实例化bean 注解方式实例化bean java方式实例化bean ClassPathXmlApplication和AnnotationConfigApplicat ...
- C++入门到理解阶段二基础篇(4)——C++运算符
目录 算术运算符(进行四则运算) 赋值运算符(表达式的值赋给变量) 比较运算符(表达是比较,返回一个真值或假值) 逻辑运算符(返回表格式的结果真或假) 位运算符 杂项运算符 C++ 中的运算符优先级 ...
- git查看/修改个人信息-用户名邮箱
我们在使用git作为仓库管理工具时,要设置自己Git的用户名和邮箱,要不然大家一块开发时不知道谁是谁,不知道谁提交的. 另外,当我们用自己的电脑开发时你可能设置的是一个你喜欢的昵称,所以那就得改一下. ...
- linux生成多对秘钥并指定秘钥登录
1.生成秘钥对并指定秘钥对名称: ssh-keygen -t rsa -f other -C "for other" 2.将other.pub公钥添加至要免密登录的服务器 3.使用 ...
- Mysql优化之Explain查询计划查看
我们经常说到mysql优化,优化中一种常见的方式就是对于经常查询的字段创建索引.那么mysql中有哪些索引类型呢? 一.索引分类1.普通索引:即一个索引只包含单个列,一个表可以有多个单列索引 2.唯一 ...