CodeForces 853 B Jury Meeting

思维题,老实说我并没有想出来,应该说是我想歪了…… 看了一个大佬的代码,真的是超整洁,这是我目前见过最整洁的代码。值得借鉴。 题意: 每个点距源点有几条单项路径,路径有个花费和另一个时间。要你买构造来回路径使得中间间隔时间不小于 k 。 思路: 首先按照日期排序,菜鸡第一想到的是按照花费权值排序 在相同日期的路径中找出所有花费权值最小的加入集合并维护其最小。如果集合已满就记录当前日期的花费。 一个道理在正向前往目的地来一次,反向返回来一次。 就得到了当前日期正向的的最小值,当前日期反向返回的最小值。 再正向找出当前日期之前的最小值,当前日期之后返回的最小值,使得中间区间尽可能大,越往中间花费越小。 再枚举间隔区间,将往返花费相加找出最小值就是答案。 AC Code #include using namespace std; typedef long long ll; const int maxd = 1e6 + 5; const int maxn = 1e5 + 5; int n, m,

codeforces

A. Anastasia and pebbles 题意: 给你n种小石块,数目确定,你每次每只手只能拿k个小石块,每只手只能拿一种小石块,问多少次拿完。 思路: 贪心。 排序后从最少的开始取。我们设当前你要取的石头堆的剩余石头为cur,每次拿取有如下几种情况: * cur<=k 全部取走,并让另一只手去重新讨论下一堆石头 * k < cur < 2*k 两只手全部取走 所取石头堆往后移 * cur>2*k 两只手全部取走 当前讨论石头堆不变 #include #include #include #include #include #include #include #include #define ll long long using namespace std; const double eps = 1e-6; const