A-链接:https://www.nowcoder.com/acm/contest/133/A
来源:牛客网

题目描述

现在有一棵被Samsara-Karma染了k种颜色的树,每种颜色有着不同的价值
Applese觉得Samsara-Karma染的太难看了,于是打算把整棵树重新染成同一种颜色
但是,由于一些奥妙重重的原因,每一次染色Applese可以选择两个有边相连的点,将其中一个染成另一个的颜色。而进行一次这样的操作需要付出两种颜色价值和的代价
现在,Applese的钱要用来买书(game),所以他想要最小化代价

输入描述:

输入包括若干行
第一行包括一个数n,表示这棵树有n个节点
第二行包括n个数,第i个数表示第i个节点的颜色col

i

**注意:一个颜色的标号即价值
接下来的n - 1行,每行包括两个数u, v,表示u节点与v节点之间有一条无向边
n ≤ 100000, 1 ≤ coli ≤ 1e9,数据保证是一棵树

输出描述:

输出包括一行
第一行包括一个数,表示最小代价

输入例子:
4
2 3 4 3
1 2
2 3
3 4
输出例子:
12

-->

示例1

输入

复制

4
2 3 4 3
1 2
2 3
3 4

输出

复制

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
来源:牛客网

题目描述


Applese有1个容量为v的背包,有n个物品,每一个物品有一个价值ai,以及一个大小bi
然后他对此提出了自己的疑问,如果我不要装的物品装的价值最大,只是一定需要装m个物品,要使得求出来的物品价值的中位数最大
Applese觉得这个题依然太菜,于是他把这个问题丢给了你
当物品数量为偶数时,中位数即中间两个物品的价值的平均值

输入描述:

第一行三个数v, n, m,分别代表背包容量,物品数量以及需要取出的物品数量
接下来n行,每行两个数ai,bi,分别代表物品价值以及大小
n ≤ 1e5, 1 ≤ m ≤ n, ai ≤ 1e9, v ≤ 1e9, bi ≤ v

输出描述:

仅一行,代表最大的中位数

输入例子:
20 5 3
3 5
5 6
8 7
10 6
15 10
输出例子:
8

-->

示例1

输入

复制

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的更多相关文章

  1. 染色 Wannafly挑战赛20 A 思维

    链接:https://www.nowcoder.com/acm/contest/133/A来源:牛客网 现在有一棵被Samsara-Karma染了k种颜色的树,每种颜色有着不同的价值 Applese觉 ...

  2. nowcoder牛客wannafly挑战赛20

    A---染色 签到题,设最终颜色为x,一次操作就需要把一个不是x的点变为x,所以最终颜色为x时需要操作 总结点个数-颜色为x的节点个数,然后枚举所有颜色就行了 #include <iostrea ...

  3. Wannafly 挑战赛 19 参考题解

    这一次的 Wannafly 挑战赛题目是我出的,除了第一题,剩余的题目好像对大部分算法竞赛者来说好像都不是特别友好,但是个人感觉题目质量还是过得去的,下面是题目链接以及题解. [题目链接] Wanna ...

  4. 【Wannafly挑战赛4】F 线路规划 倍增+Kruskal+归并

    [Wannafly挑战赛4]F 线路规划 题目描述 Q国的监察院是一个神秘的组织.这个组织掌握了整个帝国的地下力量,监察着Q国的每一个人.监察院一共有N个成员,每一个成员都有且仅有1个直接上司,而他只 ...

  5. Wannafly挑战赛25游记

    Wannafly挑战赛25游记 A - 因子 题目大意: 令\(x=n!(n\le10^{12})\),给定一大于\(1\)的正整数\(p(p\le10000)\)求一个\(k\)使得\(p^k|x\ ...

  6. Wannafly挑战赛27

    Wannafly挑战赛27 我打的第一场$Wannafly$是第25场,$T2$竟然出了一个几何题?而且还把我好不容易升上绿的$Rating$又降回了蓝名...之后再不敢打$Wannafly$了. 由 ...

  7. Wannafly挑战赛21A

    题目链接 Wannafly挑战赛21A 题解 代码 #include <cstdio> #include <cmath> #define MAX 1000005 #define ...

  8. Wannafly挑战赛24游记

    Wannafly挑战赛24游记 A - 石子游戏 题目大意: A和B两人玩游戏,总共有\(n(n\le10^4)\)堆石子,轮流进行一些操作,不能进行下去的人则输掉这局游戏.操作包含以下两种: 把石子 ...

  9. Wannafly挑战赛25C 期望操作数

    Wannafly挑战赛25C 期望操作数 简单题啦 \(f[i]=\frac{\sum_{j<=i}f[j]}{i}+1\) \(f[i]=\frac{f[i]}{i}+\frac{\sum_{ ...

  10. Wannafly挑战赛18B 随机数

    Wannafly挑战赛18B 随机数 设\(f_i\)表示生成\(i\)个数有奇数个1的概率. 那么显而易见的递推式:\(f_i=p(1-f_{i-1})+(1-p)f_{i-1}=(1-2p)f_{ ...

随机推荐

  1. Python入门学习之路,怎么 “开心,高效,踏实” 地把Python学好?兴趣,兴趣,兴趣!

    Python入门学习之路,怎么 “开心,高效,踏实” 地把Python学好?兴趣,兴趣,兴趣!找到你自己感兴趣的点进行切入,并找到兴趣点进行自我驱动是最好的学习方式!       推荐两本书,一本作为 ...

  2. cojs DAG计数问题1-4 题解报告

    最近突然有很多人来问我这些题目怎么做OwO 然而并不是我出的,结论我也不是很懂 研究了一下觉得非常的一颗赛艇,于是就打算写这样一篇题解 DAG 1 我们考虑DAG的性质,枚举出度为0的点 设出度为0的 ...

  3. MySQL中INSERT的一般用法

    原文链接:http://www.blogjava.net/midnightPigMan/archive/2014/12/15/421406.html MySQL中INSERT的一般用法 INSERT语 ...

  4. 20145315《网络对抗》——注入shellcode以及 Return-to-libc攻击实验

    shellcode 准备一段Shellcode 我用的老师的shellcode:\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3 ...

  5. VC++开机自动启动程序的几种方法 (转载)

    转载:http://blog.csdn.net/zhazhiqiang/article/details/51909703 很多监控软件要求软件能够在系统重新启动后不用用户去点击图标启动项目,而是直接能 ...

  6. Java实现心跳机制

    一.心跳机制简介 在分布式系统中,分布在不同主机上的节点需要检测其他节点的状态,如服务器节点需要检测从节点是否失效.为了检测对方节点的有效性,每隔固定时间就发送一个固定信息给对方,对方回复一个固定信息 ...

  7. python3+pyqt5 +eric5安装配置

    一.大纲内容: 1.预备PC环境: 2.预备安装程序: 2.1.下载Python3.2 2.2.下载PyQt4 2.3.下载Eric5 3.安装配置步骤: 3.1.安装Pyhon3.2 3.2.安装P ...

  8. LightOJ 1393 Crazy Calendar(博弈)题解

    题意:r*c方格中,每个格子有一定石子,每次移动每格任意数量石子,只能向下或者向右动一格,不能移动为败 思路:显然是Nim,到右下曼哈顿距离为偶数的不用管,因为先手动一下后手动一下最后移到右下后还是先 ...

  9. 【第十六章】 springboot + OKhttp + String.format

    模拟浏览器向服务器发送请求四种方式: jdk原生的Http包下的一些类 httpclient(比较原始,不怎么用了):第一章 HttpClient的使用 Okhttp(好用,推荐) retrofit( ...

  10. [bzoj 1270][BeijingWc2008]雷涛的小猫

    Description 雷涛的小猫雷涛同学非常的有爱心,在他的宿舍里,养着一只因为受伤被救助的小猫(当然,这样的行为是违反学 生宿舍管理条例的).  在他的照顾下,小猫很快恢复了健康,并且愈发的活泼可 ...