51nod
oranges_c
落寞是岁月的痕迹
展开
-
51nod-1682 中位数计数
题目链接考虑如何计算一个数的答案: 定义一个b数组,把所有大于自己的值定义为1,小于自己的值定义为-1,等于自己的定义为0。 如果包含这个数的区间这个数是中位数,则定义后的总和为0。 考虑前缀和,那么问题就变成了在这个数两边有多少对相等的数。 可以先把左边的数统计一下,右边的数就可以O(1)O(1)查询,时间复杂度O(n)O(n) 总时间复杂度O(N2)O(N^2)原创 2017-03-02 21:02:33 · 286 阅读 · 0 评论 -
51nod-1163 最高的奖励(贪心)
题目链接因为天数最大为n,所以所有结束时间大于n的都可以设为n 考虑天数 从后往前贪心,将结束时间为当前天的奖金放入大顶堆 然后只要选取堆顶元素就行了。 这样可以保证堆中的元素的结束时间都大于等于当前天,然后只要选取奖金最大的就行了。#include <bits/stdc++.h> using namespace std; #define cl(a,b) memset原创 2017-03-02 21:08:14 · 285 阅读 · 0 评论 -
51nod-1191 消灭兔子(贪心)
题目链接这题是上题的进阶。 对于每支箭,我们要找到第一个血量大于伤害值的兔子的位置pos,那么我们把这只箭的伤害值设为pos-1的兔子的血量值 跟上题类似,从后往前贪心 将伤害值为当前兔子血量值的价格放入小顶堆,并且清空数组,因为血量可以相等,防止重复放入。 每次选取堆顶元素就可以了。 如果在消灭某一只兔子时堆为空时,那么说明没有弓箭可以消灭这只兔子,所以输出No原创 2017-03-02 21:15:39 · 347 阅读 · 0 评论 -
codeforces-546E. Soldier and Traveling(网络流)
题目链接 51nod上的翻译这种从一个初始状态到达一个目标状态的,从感觉上来说有很多种可能的,可以用网络流。网络流最重要的是建图。 源点与城市的边的容量是a[i]a[i] 城市与汇点的边的容量是b[i]b[i] 城市与自身的边是INFINF,表示可以不移动。 城市与相邻的城市的容量也是INFINF,表示可以移动到相邻的城市。然后跑Dinic求最大流。 如果等于∑a原创 2017-06-19 18:00:30 · 341 阅读 · 0 评论