老司机的奇怪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】

【↑是个蒟蒻的自白罢了↑】

 1 #include <iostream>
 2 #include <string.h>
 3 #include <cstdlib>
 4 #include <cstdio>
 5 #include <algorithm>
 6 #include <cstring>
 7 #include <vector>
 8 #include <ctime>
 9 #include <queue>
10 #define ivorysi
11 #define mo 10007
12 #define siji(i,x,y) for(int i=(x);i<=(y);i++)
13 #define gongzi(j,x,y) for(int j=(x);j>=(y);j--)
14 #define xiaosiji(i,x,y) for(int i=(x);i<(y);i++)
15 #define sigongzi(j,x,y) for(int j=(x);j>(y);j--)
16 #define ivory(i,x) for(int i=head[x];i;i=edge[i].next)
17 #define pii pair<int,int>
18 #define fi first
19 #define se second
20 #define inf 10000000
21 typedef long long ll;
22 using namespace std;
23 int n,k;
24 int v[100005],sum[100005];
25 int id[100005];
26 struct mtwo {
27     int a,b;
28 };
29 inline bool operator < (mtwo q,mtwo p) {
30     return abs(sum[id[q.a]]-sum[id[q.b]]) < abs(sum[id[p.a]]-sum[id[p.b]]);
31 }
32 inline bool cmp(int a,int b) {
33     return sum[a]>sum[b];
34 }
35 priority_queue<mtwo> que;
36 int main() {
37 #ifdef ivorysi
38     freopen("zhugeliang.in","r",stdin);
39     freopen("zhugeliang.out","w",stdout);
40 #else
41     freopen("f1.in","r",stdin);
42 #endif
43     scanf("%d%d",&n,&k);
44     siji(i,1,n) {
45         scanf("%d",&v[i]);
46         id[i]=i;
47     }
48     siji(i,1,n) {
49         sum[i]=sum[i-1]+v[i];
50     }
51     sort(id,id+n+1,cmp);
52     xiaosiji(i,0,n) {
53         que.push((mtwo){i,n});
54     }
55     siji(i,1,k) {
56         mtwo tmp=que.top();que.pop();
57         if(tmp.b-1 != tmp.a)que.push((mtwo){tmp.a,tmp.b-1});
58         printf("%d\n",abs(sum[id[tmp.a]]-sum[id[tmp.b]]));
59     }
60 }

【臣将常怀民生愿 他朝归来春满园】

【廊外恍若先帝共臣把盏对弈似当年】

【得谋太平在人间 吴魏参拜于殿前】

【天下归一 大汉归刘 百姓晏】

如果我记忆力好写字快的话我真的好想以后考历史系……_(:з」∠)_ 可惜一看古文眼睛疼_(:з」∠)_

三国演义亮黑,三国志亮死忠粉

等等我怎么扯到这么远了……

时间: 2024-08-15 15:08:02

老司机的奇怪noip模拟T3-zhugeliang的相关文章

老司机的奇怪noip模拟T2-huangyueying

2. 黄月英(huangyueying.cpp/c/pas )[问题描述]xpp 每天研究天文学研究哲学,对于人生又有一些我们完全无法理解的思考.在某天无聊学术之后, xpp 打开了 http://web.sanguosha.com, 准备用他心爱的黄月英虐人.进入了八人身份局,作为一位主公,xpp 果断选了黄月英,用黄月英挑 7 人.xpp 为什么喜欢黄月英这个武将呢?因为集智是个很牛逼的技能.集智——每当你使用一张非延时类锦囊(在它结算之前)你可以立即摸一张牌.可见集智这个技能如果用得好那么

老司机的奇怪noip模拟T1-guanyu

1. 关羽(guanyu.cpp/c/pas )[问题描述]xpp 每天研究天文学研究哲学,对于人生又有一些我们完全无法理解的思考.在某天无聊学术之后, xpp 打开了 http://web.sanguosha.com, 准备用他心爱的关羽虐人.进入了八人身份局,作为一位主公,xpp 果断选了关羽,用关羽挑 7 人.xpp 为什么喜欢关羽这个武将呢?因为武圣是个很牛逼的技能.武圣——你可以将你的任意一张红桃或方片牌当杀使用或打出.可见武圣这个技能如果用得好那么是可以轻松杀死别人的. 于是 xpp

Android老司机搬砖小技巧

作为一名Android世界的搬运工,每天搬砖已经够苦够累了,走在坑坑洼洼的道路一不小心就掉坑里了. SDK常用工具类 Android SDK中本身就拥有很多轮子,熟悉这些轮子,可以提高我们的搬砖效率. android.text.TextUtils 字符串操作常用方法:isEmpty() ,join(),split()等 if(!TextUtils.isEmpty(text)){ //do something } android.webkit.URLUtil 链接相关常用方法:isHttpUrl(

NOIP模拟17.8.17

NOIP模拟17.8.17 A 小 G 的字符串文件名 输入文件 输出文件 时间限制 空间限制str.pas/c/cpp str.in str.out 1s 128MB[题目描述]有一天,小 L 给小 G 出了这样一道题:生成一个长度为 n 的.全由小写英文字母构成的字符串,只能使用 k 种字母.要求满足:• 字符串中相邻的两个字母不能相同.• 必须出现恰好 k 种不同的字母.这样的合法字符串可能有很多,小 L 让小 G 输出字典序最小的那个.小 G 太笨啦,不会做这道题,希望你帮帮他.[输入格

FJNU 1176 汪老司机(DP or 建图+最短路)

1196: 汪老司机 Time Limit: 1000 MS         Memory Limit: 257792 KB 64-bit interger IO format: %lld        Java class name: Main Prev Submit  Discuss Next 汪老司机是实验室出了名的老司机,早在大一就拿到了驾照,每年的暑假他都会带家人开车出游,今年的暑假也不例外,汪老司机今年准备带家人去平潭游玩,汪老司机的家离平潭有两条路,每条路都存在n个路段,两条路的n

Juniper老司机经验谈(SRX防火墙NAT与策略篇)视频课程上线了

继前面的<Juniper老司机经验谈(SRX防火墙优化篇)>之后,Juniper老司机经验谈(SRX防火墙NAT与策略篇)第二部视频课程也录制上线了 1.两个课程完全独立又相结合, SRX防火墙优化篇是针对防火墙双机.配置优化内容. SRX防火墙NAT与策略篇则是针对防火NAT.策略内容 . 两部除了前几4单节基础理论与模拟环境搭建部分一样外,其他内容完全不重叠. 2.本课程内容: 大家在QQ群.论坛里经常提的问题,许多人对SRX使用中NAT\策略问题不是很理解,实际工作中碰见太多问题,惹出了

NOIP模拟 17.8.18

NOIP模拟17.8.18 A.小菜一碟的背包[题目描述]Blice和阿强巴是好朋友但萌萌哒Blice不擅长数学,所以阿强巴给了她一些奶牛做练习阿强巴有 n头奶牛,每头奶牛每天可以产一定量的奶,同时也需要一定量的草作为饲料对于第 i头奶牛来说,它每天可以产 vi升的奶,同时需要 wi千克的草作为饲料现在来自蚯蚓国的九条可怜想借一些奶牛,使借走的这些奶牛每天的总产奶量最大,但九条可怜很穷,每天最多只能提供W千克的草作为饲料,而且她还需要对付跳蚤国的神刀手,所以她把这个问题交给了阿强巴,不不不……阿

NOIP模拟17.9.21

NOIP模拟17.9.21 1 任务安排manage.in/.out/.cpp1.1 问题描述你有N 个工作,同一时刻只能做一个任务, 其中每个工作有其所需时间, 及完成的Deadline(截止时间), 问要完成所有工作, 最迟要从什么时候开始.你最早可以从时间0 开始工作.1.2 输入格式第一行一个整数N,表示任务数量接下来n 行,每行两个整数,Ti; Si,分别表示该任务的持续时间和截止时间.1.3 输出格式输出一个整数,表示最晚的开始时间,如果不能完成,输出-1.1.4 样例输入43 58

NOIP模拟17.9.22

NOIP模拟17.9.22 前进![问题描述]数轴的原点上有一只青蛙.青蛙要跳到数轴上≥ ??的位置去,但很不幸数轴上有??个区间是禁区,不能进入.青蛙会选择一个长度??,从原点开始每次向右跳长度为??的一段.一路上青蛙会停的位置是0, ??, 2??,…直到跳到了≥ ??的位置,任意一个位置都不能在禁区中.请求出??的最小值,注意??可以是实数.[输入格式]输入文件为susume.in.输入文件的第一行包含两个整数??和??,含义如问题描述中所述.接下来??行,每行描述一个禁区.每行有两个整数