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这三个人 ...
随机推荐
- 【未完成】【oracle】单引号使用问题
‘-’不可以用 原因:
- 用arthas的watch方法观察执行方法的输入输出
watch 的参数比较多,主要是因为它能在 4 个不同的场景观察对象 参数名称 参数说明 class-pattern 类名表达式匹配 method-pattern 方法名表达式匹配 express 观 ...
- 解决:Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?
简单粗暴法 删除锁 $ sudo rm /var/cache/apt/archives/lock $ sudo rm /var/lib/dpkg/lock 如果还不行,重启虚拟机 $ reboot
- python--8大排序(原理+代码)
常用的排序方法:冒泡排序.选择排序.插入排序.快速排序.堆排序.归并排序 冒泡排序(Bubble Sort): 比较相邻的元素.如果第一个比第二个大(升序),就交换他们两个. 对每一对相邻元素作同样的 ...
- 1+x证书web前端开发jquery专项练习测试题
javascript程序设计-题库 1.下面哪一种不属于Jquery的选择器? A. 基本选择器 B. 层次选择器 C. 表单选择器 D. 节点选择器 答案: D 2.如果需要匹配包含文本的元素,用下 ...
- Leetcode练习题Longest Common Prefix
Question: Longest Common Prefix Write a function to find the longest common prefix string amongst an ...
- Javase之object类的概述
object类的概述 object类是类层次结构的根类,每个类都使用object作为超类. 即每个类都直接或间接的继承object类. object类中方法介绍 hashCode public int ...
- 苹果 iOS13.2.2 正式版修复闷杀后台问题了?别担心,PerfDog 帮你来检测!
导语 苹果于上周推送了iOS 13.2版本,带来了用户备受期待的图像处理系统深度融合(Deep Fusion),新增70多个表情.HomeKit安全视频.Siri隐私设置和支持AirPods Pro等 ...
- xml解析-jaxp添加结点
jaxp添加结点 eg: //在第一个下面添加nv / 1.创建解析器工厂 * 2.根据解析器工厂创建解析器 * 3.解析xml返回document * * 4.得到第一个p1 * -得到所有p1使用 ...
- Mixins and Python
什么是Mixin (混入) Mixin 这个词在Python/Ruby中经常使用, Java 中几乎看不到这个名词. 在Java 中, 我们经常定一个一个子类扩展了某个基类, 同时实现某些接口. 因为 ...