Wannafly挑战赛20-A,B
A-链接:https://www.nowcoder.com/acm/contest/133/A
来源:牛客网
题目描述
输入描述:
输入包括若干行
第一行包括一个数n,表示这棵树有n个节点
第二行包括n个数,第i个数表示第i个节点的颜色col
i
**注意:一个颜色的标号即价值
输出描述:
输出包括一行
第一行包括一个数,表示最小代价
输入例子:
4
2 3 4 3
1 2
2 3
3 4
输出例子:
12
-->
输出
12
边的输入根本就是多余的,直接枚举所有颜色统计最小的值即可。
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define inf 0x3f3f3f3f3f3f3f
int col[];
map<int,int>M;
int main(){
int n,m,i,j,k;
while(cin>>n){ll u,v,tot=,all=;
M.clear();
for(i=;i<=n;++i) {
scanf("%d",col+i);
all+=col[i];
M[col[i]]++;
}
for(i=;i<n;++i){
scanf("%d%d",&u,&v);
}
ll ans=inf;
for(i=;i<=n;++i){
ll tt=M[col[i]];
ans=min(ans,((ll)n-tt)*col[i]+all-tt*col[i]);
}
cout<<ans<<endl;
}
return ;
}
B-链接:https://www.nowcoder.com/acm/contest/133/B
来源:牛客网
题目描述
然后他对此提出了自己的疑问,如果我不要装的物品装的价值最大,只是一定需要装m个物品,要使得求出来的物品价值的中位数最大
Applese觉得这个题依然太菜,于是他把这个问题丢给了你
当物品数量为偶数时,中位数即中间两个物品的价值的平均值
输入描述:
第一行三个数v, n, m,分别代表背包容量,物品数量以及需要取出的物品数量
输出描述:
仅一行,代表最大的中位数
输入例子:
20 5 3
3 5
5 6
8 7
10 6
15 10
输出例子:
8
-->
非常操蛋,因为我把m打成了n,把first打成了second导致debug了一天,浪费很久的时间= =
做法并不难想,将物品分成前,中,后三个部分且每一部分的长度都知道,然后预处理下前/后最小的体积值,
枚举中间的1/2个点,对于奇数长度,直接枚举中点。偶数长度,枚举第一个点,二分查找右边一个的点(之所以能二分是因为first递增
而且rs[]也是递增的),在满足总的体积不超v的情况下使得价值尽可能的大,也就等价于尽可能的找右边的点。
#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define pii pair<LL,LL> pii x[];
LL ls[],rs[];
priority_queue<LL>q;
priority_queue<LL>q2; void init(int n,int m){ int ll=(m-)/,rr=(m-)/;
LL sum=;
for(int i=;i<=ll;++i){
q.push(x[i].second);
sum+=x[i].second;
}
ls[ll]=sum;
for(int i=+ll;i<=n;++i){
if(q.empty()) continue;
if(/*!q.empty()&&*/q.top()>x[i].second){
sum=sum-q.top()+x[i].second;
q.pop();
q.push(x[i].second);
}
ls[i]=sum;
} sum=;
for(int i=n;i>n-rr;--i){
q2.push(x[i].second);
sum+=x[i].second;
}
rs[n-rr+]=sum;
for(int i=n-rr;i>=;--i){
if(!q2.empty()&&q2.top()>x[i].second){
sum=sum-q2.top()+x[i].second;
q2.pop();
q2.push(x[i].second);
}
rs[i]=sum;
}
}
int main(){
int n,m,i,j,k;
LL v;
cin>>v>>n>>m;
for(i=;i<=n;++i) scanf("%lld%lld",&x[i].first,&x[i].second);
sort(x+,x++n);
init(n,m);
int ll=(m-)/,rr=(m-)/;
if(m%){
LL ans=;
for(i=n-rr;i>ll;--i){
if(ls[i-]+rs[i+]+x[i].second<=v)
{ans=x[i].first;break;}
}
cout<<ans<<endl;
}
else{
LL ans=;
for(i=ll+;i<n-rr;++i){
int L=i+,R=n;
LL tmp=v-ls[i-]-x[i].second;
while(L<R){
int mid=R-((R-L)>>);
if(n-(mid+)+>=rr&&x[mid].second+rs[mid+]<=tmp) L=mid;
else R=mid-;
}
if(tmp-x[L].second-rs[L+]>=&&n-(L+)+>=rr)
ans=max(ans,x[i].first+x[L].first);
}
cout<<ans/<<endl;
} return ;
}
Wannafly挑战赛20-A,B的更多相关文章
- 染色 Wannafly挑战赛20 A 思维
链接:https://www.nowcoder.com/acm/contest/133/A来源:牛客网 现在有一棵被Samsara-Karma染了k种颜色的树,每种颜色有着不同的价值 Applese觉 ...
- nowcoder牛客wannafly挑战赛20
A---染色 签到题,设最终颜色为x,一次操作就需要把一个不是x的点变为x,所以最终颜色为x时需要操作 总结点个数-颜色为x的节点个数,然后枚举所有颜色就行了 #include <iostrea ...
- Wannafly 挑战赛 19 参考题解
这一次的 Wannafly 挑战赛题目是我出的,除了第一题,剩余的题目好像对大部分算法竞赛者来说好像都不是特别友好,但是个人感觉题目质量还是过得去的,下面是题目链接以及题解. [题目链接] Wanna ...
- 【Wannafly挑战赛4】F 线路规划 倍增+Kruskal+归并
[Wannafly挑战赛4]F 线路规划 题目描述 Q国的监察院是一个神秘的组织.这个组织掌握了整个帝国的地下力量,监察着Q国的每一个人.监察院一共有N个成员,每一个成员都有且仅有1个直接上司,而他只 ...
- Wannafly挑战赛25游记
Wannafly挑战赛25游记 A - 因子 题目大意: 令\(x=n!(n\le10^{12})\),给定一大于\(1\)的正整数\(p(p\le10000)\)求一个\(k\)使得\(p^k|x\ ...
- Wannafly挑战赛27
Wannafly挑战赛27 我打的第一场$Wannafly$是第25场,$T2$竟然出了一个几何题?而且还把我好不容易升上绿的$Rating$又降回了蓝名...之后再不敢打$Wannafly$了. 由 ...
- Wannafly挑战赛21A
题目链接 Wannafly挑战赛21A 题解 代码 #include <cstdio> #include <cmath> #define MAX 1000005 #define ...
- Wannafly挑战赛24游记
Wannafly挑战赛24游记 A - 石子游戏 题目大意: A和B两人玩游戏,总共有\(n(n\le10^4)\)堆石子,轮流进行一些操作,不能进行下去的人则输掉这局游戏.操作包含以下两种: 把石子 ...
- Wannafly挑战赛25C 期望操作数
Wannafly挑战赛25C 期望操作数 简单题啦 \(f[i]=\frac{\sum_{j<=i}f[j]}{i}+1\) \(f[i]=\frac{f[i]}{i}+\frac{\sum_{ ...
- Wannafly挑战赛18B 随机数
Wannafly挑战赛18B 随机数 设\(f_i\)表示生成\(i\)个数有奇数个1的概率. 那么显而易见的递推式:\(f_i=p(1-f_{i-1})+(1-p)f_{i-1}=(1-2p)f_{ ...
随机推荐
- iOS之第三方库以及XCode插件介绍
前言 第三方库是现在的程序员离不开的东西 不光是APP开发 基本上所有的商业项目 都会或多或少的使用到第三方库 Github上Star>100的开源库数量如下 可以看到JS以绝对的优势排名第一 ...
- Python入门之面向对象编程(四)Python描述器详解
本文分为如下部分 引言——用@property批量使用的例子来引出描述器的功能 描述器的基本理论及简单实例 描述器的调用机制 描述器的细节 实例方法.静态方法和类方法的描述器原理 property装饰 ...
- Python面试题之装饰器漫谈
讲 Python 装饰器前,我想先举个例子,虽有点污,但跟装饰器这个话题很贴切. 每个人都有的内裤主要功能是用来遮羞,但是到了冬天它没法为我们防风御寒,咋办?我们想到的一个办法就是把内裤改造一下,让它 ...
- Linux系统安装telnet以及xinetd服务
Linux系统安装telnet以及xinetd服务 一.安装telnet 1.检测telnet-server的rpm包是否安装 # rpm -qa telnet-server 若无输入内容,则表示没有 ...
- linux学习笔记《一.烧写篇_android》
一.菜鸟入门.烧写篇 (1).A8板子烧写程序 (NANDFlash烧写) ①烧写软件: 安装原件 安装后: 应用软件图标 ② 我们首先选中English/中文,切换到中文,然后关掉重启(也可以用英文 ...
- POJ1128 Frame Stacking(拓扑排序+dfs)题解
Description Consider the following 5 picture frames placed on an 9 x 8 array. ........ ........ ... ...
- neuroph Perceptron Sample
错误: Exception in thread "main" java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory ...
- 【Coursera】Internet History 小结
前言 终于看完了接近一半课程的 History 的内容. 在这两周的时间里面,了解了互联网的起源,发展,以及现在互联网的情况.听了许多故事,有让人会心一笑的,也有令人感慨万千的.见到了许多令人景仰的科 ...
- 机器学习 MLIA学习笔记(二)之 KNN算法(一)原理入门实例
KNN=K-Nearest Neighbour 原理:我们取前K个相似的数据(排序过的)中概率最大的种类,作为预测的种类.通常,K不会大于20. 下边是一个简单的实例,具体的含义在注释中: impor ...
- pandas 设置单元格的值
import pandas as pd import pickle import numpy as np dates = pd.date_range() df = pd.DataFrame(np.ar ...