老司机的奇怪noip模拟T3-zhugeliang
3. 诸葛亮
(zhugeliang.cpp/c/pas )
【问题描述】
xpp 每天研究天文学研究哲学,对于人生又有一些我们完全无法理解的思考。
在某天无聊学术之后, xpp 打开了 http://web.sanguosha.com, 准备用他心爱的诸葛亮
虐人。进入了八人身份局,作为一位主公,xpp 果断选了诸葛亮,用诸葛亮挑 7 人。
xpp 为什么喜欢周瑜这个武将呢?因为观星是个很牛逼的技能。
观星——回合开始阶段, 你可以观看牌堆顶的 X 张牌 (X 为存活角色的数量且最多为 5) ,
将其中任意数量的牌以任意顺序置于牌堆顶,其余则以任意顺序置于牌堆底。
可见观星这个技能如果用得好那么是可以知道对方所有牌的。 于是 xpp 把 7 个人全部轻
松干掉。
虽然 xpp 的观星永远能知道全场手牌, 但是他想到了这样一个问题: 正常的观星应该会
发生什么呢?
假设每张牌能给诸葛亮带来一定收益,那么 xpp 现在想计算,某种特定情况下,诸葛亮
观星带来的最大收益是多少。
但是 zjr 经过一年的思考,把这道题做出来了。xpp 觉得问题太简单了。他觉得,他都
想了那么久,你怎么可能想出来?于是 xpp 决定加强这个题。假设观星能观 n 张牌,对于每
张牌都有一个收益 v[i],那么他现在要找到一些牌使他能获得的收益和最大。
但是 zjr 经过两年的思考,把这道题做出来了。xpp 觉得问题太简单了。他觉得,他都
想了那么久, 你怎么可能想出来?于是 xpp 决定加强这个题。 他要求选取的那些牌需要是连
续的。
但是 zjr 经过三年的思考,把这道题做出来了。xpp 觉得问题太简单了。他觉得,他都
想了那么久,你怎么可能想出来?于是 xpp 决定加强这个题。根据他的哲学思想,他认为任
何情况都是可能发生的,于是他决定不仅要算出最大收益,还要算出次大收益、第三大收
益……直到第 k 大收益。他想,这下 zjr 这个傻逼应该做不出来了吧。
但是 zjr 经过四年的思考,把这道题做出来了。xpp 觉得问题太简单了。他觉得,他都
想了那么久,你怎么可能想出来?于是 xpp 决定加强这个题。他发现这个似乎是一道原题,
于是他又加了一个条件,俗话说否极泰来,那么收益值就等于它的绝对值。
xpp 智商过于强大,不屑于想此等低端问题,然后你就要把这道题做出来。
【输入】
输入文件名为 zhugeliang.in。
第一行包含一个整数 n,k。
接下来一行,包括 n 个整数,第 i 个数是 v[i]。
【输出】
输出文件名为 zhugeliang.out。
输出共 k 行,每行包括一个整数,第 i 行的数表示第 i 大的收益。
【输入输出样例】
zhugeliang.in
5 2
1 2 -1 -1 3
zhugeliang.out
4
3
【数据范围】
对于 10%的数据,1≤n≤200。
对于 30%的数据,1≤n≤2000。
对于 50%的数据,1≤n≤100000,1≤k≤1000。
对于 100%的数据,1≤n≤100000,1≤k≤n,-1000≤v[i]≤1000。
——————————————————————————————题解
首先都会想到前缀和,就设它为sum
因为是绝对值,所以sum[1]-sum[5]=sum[5]-sum[1]
所以我们就可以设一个二元组(a,b),为| sum[a]-sum[b] |
我们可以将前缀和排序,最大的肯定是(0,n),第二个是(1,n)或(0,n-1),但是这样会有重复
所以我们可以固定每个开头,也就是在排好序的前缀和里,对任意a<n插入所有的(a,n),然后得到一个(a,b)插入一个(a,b-1),插入是喜闻乐见的堆
然后做完了
【我觉得我看题解的功力越来越强了orz】
【↑是个蒟蒻的自白罢了↑】
#include <iostream>
#include <string.h>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <vector>
#include <ctime>
#include <queue>
#define ivorysi
#define mo 10007
#define siji(i,x,y) for(int i=(x);i<=(y);i++)
#define gongzi(j,x,y) for(int j=(x);j>=(y);j--)
#define xiaosiji(i,x,y) for(int i=(x);i<(y);i++)
#define sigongzi(j,x,y) for(int j=(x);j>(y);j--)
#define ivory(i,x) for(int i=head[x];i;i=edge[i].next)
#define pii pair<int,int>
#define fi first
#define se second
#define inf 10000000
typedef long long ll;
using namespace std;
int n,k;
int v[],sum[];
int id[];
struct mtwo {
int a,b;
};
inline bool operator < (mtwo q,mtwo p) {
return abs(sum[id[q.a]]-sum[id[q.b]]) < abs(sum[id[p.a]]-sum[id[p.b]]);
}
inline bool cmp(int a,int b) {
return sum[a]>sum[b];
}
priority_queue<mtwo> que;
int main() {
#ifdef ivorysi
freopen("zhugeliang.in","r",stdin);
freopen("zhugeliang.out","w",stdout);
#else
freopen("f1.in","r",stdin);
#endif
scanf("%d%d",&n,&k);
siji(i,,n) {
scanf("%d",&v[i]);
id[i]=i;
}
siji(i,,n) {
sum[i]=sum[i-]+v[i];
}
sort(id,id+n+,cmp);
xiaosiji(i,,n) {
que.push((mtwo){i,n});
}
siji(i,,k) {
mtwo tmp=que.top();que.pop();
if(tmp.b- != tmp.a)que.push((mtwo){tmp.a,tmp.b-});
printf("%d\n",abs(sum[id[tmp.a]]-sum[id[tmp.b]]));
}
}
【臣将常怀民生愿 他朝归来春满园】
【廊外恍若先帝共臣把盏对弈似当年】
【得谋太平在人间 吴魏参拜于殿前】
【天下归一 大汉归刘 百姓晏】
如果我记忆力好写字快的话我真的好想以后考历史系……_(:з」∠)_ 可惜一看古文眼睛疼_(:з」∠)_
三国演义亮黑,三国志亮死忠粉
等等我怎么扯到这么远了……
老司机的奇怪noip模拟T3-zhugeliang的更多相关文章
- 老司机的奇怪noip模拟T2-huangyueying
2. 黄月英(huangyueying.cpp/c/pas )[问题描述]xpp 每天研究天文学研究哲学,对于人生又有一些我们完全无法理解的思考.在某天无聊学术之后, xpp 打开了 http://w ...
- 老司机的奇怪noip模拟T1-guanyu
1. 关羽(guanyu.cpp/c/pas )[问题描述]xpp 每天研究天文学研究哲学,对于人生又有一些我们完全无法理解的思考.在某天无聊学术之后, xpp 打开了 http://web.sang ...
- NOIP 模拟 $18\; \rm 老司机的狂欢$
题解 \(by\;zj\varphi\) 一道很有趣的题,我用的动态开点线段树和倍增 首先对于第一问,不难想到要二分,二分时间,因为时间长一定不会比时间短能跑的人多 那么如何 check,先将所有老司 ...
- [CSP-S模拟测试]:老司机的狂欢(LIS+LCA)
题目背景 光阴荏苒.不过,两个人还在,两支车队还在,熟悉的道路.熟悉的风景,也都还在.只是,这一次,没有了你死我活的博弈,似乎和谐了许多.然而在机房是不允许游戏的,所以班长$XZY$对游戏界面进行了降 ...
- NOIP模拟赛-2018.11.7
NOIP模拟赛 如果用命令行编译程序可以发现没加头文件之类的错误. 如果用命令行编译程序可以发现没加头文件之类的错误. 如果用命令行编译程序可以发现没加头文件之类的错误. 编译之前另存一份,听说如果敲 ...
- NOIP模拟赛-2018.11.6
NOIP模拟赛 今天想着反正高一高二都要考试,那么干脆跟着高二考吧,因为高二的比赛更有技术含量(我自己带的键盘放在这里). 今天考了一套英文题?发现阅读理解还是有一些困难的. T1:有$n$个点,$m ...
- NOIP模拟 29
T1第一眼觉得是网络流 看见4e6条边200次增广我犹豫了 O(n)都过不去的赶脚.. 可是除了网络流板子我还会什么呢 于是交了个智障的EK 还是用dijkstra跑的 居然有50分!$(RP--)$ ...
- noip模拟18
\(\color{white}{\mathbb{曲径通幽,星汉隐约,缥缈灯影,朦胧缺月,名之以:薄雾}}\) 放眼望去前十被我弃掉的 \(t2\) 基本都上85了-- 开考就以为 \(t2\) 是个大 ...
- FJNU 1196 汪老司机(DP or 建图+最短路)
1196: 汪老司机 Time Limit: 1000 MS Memory Limit: 257792 KB 64-bit interger IO format: %lld ...
随机推荐
- 01--css编码技巧--css揭秘
一 尽量减少代码重复 1.按钮 #btn { padding: .3em .8em; border: 1px solid #446d88; background: #58a linear-gradie ...
- iOS开发-OC语言 (七)继承、多态、类别
继承.多态.类别 学习目标 1.继承的含义 2.父类子类的别称 3.字段和消息的继承 4.重写和重写消息的调用 5.多态 6.类别(Category) ======================== ...
- Linux界面自动化测试框架不完全汇总
首先可参考wiki此文,非常详尽:https://en.wikipedia.org/wiki/List_of_GUI_testing_tools 以下是我调研并实验过的(实验环境ubuntu 16.0 ...
- Linux CentOS7/RHEL7关闭ctrl+alt+delete功能键
这是本人测试的经过,纯粹记录来看看,最终解决方法在最后面,中间讲的是遇到的一些坑,可以略过不看!! 本人操作经验,转载请表明出处:http://www.cnblogs.c ...
- 自定义配置文件的使用及加载-txt
[Game] Version=1 [Login] Account = 阿斗阿斯顿撒 Password =我去饿我去恶趣味 Success = 成哥 Faild = 失败 [Job] Job1 = 战士 ...
- Cg(C for Graphic)标准函数库之数学函数与几何函数
和 C 的标准函数库类似, Cg 提供了一系列内建的标准函数.这些函数用于执行数学上的通用计算或通用算法(纹理映射等),例如,需要求取入射光线的反射光线方向向量可以使用标准函数库中的 reflect ...
- C# 显式创建线程 or 使用线程池线程--new Thread() or ThreadPool.QueueUserWorkItem()
在C#多线程编程中,关于是使用自己创建的线程(Thread)还是使用线程池(ThreadPool)线程,一直很困惑,知道看了Jeffrey Richter的相关介绍才明白,记录如下: 当满足一下任何条 ...
- flume 以 kafka 为channel 的配置
#此配置以kafka的一个topic为channel,相比其他channel类型 file和cache 兼并了快和安全的要求!# Define a kafka channel a1.channels. ...
- 设计模式 -- 代理模式 (Proxy Pattern)
定义: 为其他对象提供一种代理以控制对这个对象的访问: 角色: 1,抽象主题类,(接口或者抽象类),抽象真实主题和代理的共有方法(如下Subject类): 2,具体实现的主题类,继承或者实现抽象主题类 ...
- Highcharts属性介绍
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...