2025.1.5 鲜花
Buy One, Get One Free 题解
One Last Kiss & Beautiful World
初めてのルーブルは
なんてことはなかったわ
私だけのモナリザ
もうとっくに出会ってたから
初めてあなたを見た
あの日動き出した歯車
止められない喪失の予感
もういっぱいあるけれど
もう一つ増やしましょう
(Can you give me one last kiss?)
忘れたくないこと
Oh oh oh oh oh
忘れたくないこと
Oh oh oh oh oh
I love you more than you'll ever know
「写真が苦手なんだ」
でもそんなものはいらないわ
あなたが焼きついたまま
私の心のプロジェクター
寂しくないふりしてた
まあ そんなのお互い様か
誰かを求めることは
即ち傷つくことだった
Oh can you give me one last kiss?
燃えるようなキスをしよう
忘れたくても
忘れられないほど
Oh oh oh oh oh
I love you more than you'll ever know
Oh oh oh oh oh
I love you more than you'll ever know
もう分かっているよ
この世の終わりでも
年をとっても
忘れられない人
Oh oh oh oh oh
忘れられない人
Oh oh oh oh oh
I love you more than you'll ever know
Oh oh oh oh oh
忘れられない人
Oh oh oh oh oh
I love you more than you'll ever know
吹いていった風の後を
追いかけた 眩しい午後
It's only love
It's only love
もしも願い一つだけ
叶うなら
君の側で眠らせて
どんな場所でもいいよ
Beautiful world
迷わず君だけを見つめている
Beautiful boy
自分の美しさまだ知らないの
It's only love
寝ても覚めても少年マンガ
夢見てばっか
自分が好きじゃないの
何が欲しいか 分からなくて
ただ欲しがって
ぬるい涙が頬を伝う
言いたいことなんか無い
ただもう一度会いたい
言いたいこと言えない
根性無しかもしれない
それでいいけど
もしも願い一つだけ
叶うなら
君の側で眠らせて
どんな場所でもいいよ
Beautiful world
迷わず君だけを見つめている
Beautiful boy
自分の美しさまだ知らないの
It's only love
どんなことでも やってみて
損をしたって
少し経験値上がる
新聞なんかいらない
肝心なことが載ってない
最近調子どうだい?
元気にしてるなら
別にいいけど
僕の世界消えるまで
会えぬなら
君の側で眠らせて
どんな場所でも結構
Beautiful world
儚く過ぎて行く日々の中で
Beautiful boy
気分のムラは仕方ないね
もしも願い一つだけ
叶うなら
君の側で眠らせて
Beautiful world
Beautiful boy
Beautiful world
Beautiful boy
Beautiful world
Beautiful boy
Beautiful world
5k 的新年第一篇鲜花(确信
虽然我不是 EVA 批,但是还是多学习学习 9G 放点现代歌别放上世纪七十年代的歌了。
感觉上来说是个好题。
反悔贪心。
首先显然的贪心,就是最大带次大,以此类推。
然后你发先样例就挂了,考虑原因,发现在有相同的数没法互相选,容易想到反悔一下。
先排序,对于每种分别考虑,先将能免费的免掉,在考虑剩下的。
考虑原来免费的一个东西,花钱买它可以获得两个免费机会,容易想到按照两个一组来反悔,即考虑贡献判断是否用一个已经免费的换两个剩下的。
容易想到简单的反悔,把贡献差当成一个新物品扔进去,但是这样有十分深刻的问题,这样只能一撤到底,不能单拿出来一条链或这一部分。
有组数据:
如果用那样的反悔没法在最后把 \(6 - 5\) 拆成 \(6 - 4, 5 - 4\)。
考虑本质矛盾时你把中间的几种状态扔掉了,考虑每次不弹出,即同时保留原来的 \(x\),贡献差 \(d = x - x' * 2\)。考虑实际意义,发现其基本是有意义的,保留 \(x, d\) 可以看成保留 \(x'\) 即进行替换,保留 \(x\) 可以看成不替换,也就是说我们将堆中元素的和作为最大免费值基本都是对的,只有只保留 \(d\) 时不合法。
考虑如何让他不只保留 \(d\),发现只有当 \(d > x\) 即 \(x' > x\) 时可能,而 \(x' > x\) 显然可以直接替换。
然后你发现可能会余下一个,容易发现其只有可能作为 \(x' > x\) 替换,于是可以直接做。
Code
#include <bits/stdc++.h>
using namespace std;
using llt = long long;
using ull = unsigned long long;
using llf = long double;
#define endl '\n'
#ifdef LOCAL
FILE *InFile = freopen("in_out/in.in", "r", stdin), *OutFile = freopen("in_out/out.out", "w", stdout);
#else
FILE *InFile = stdin, *OutFile = stdout;
#endif
const int N = 5e5 + 3;
int ca[N], n; llt ans = 0;
struct V{
int a, c;
V(int x, int y) : a(x), c(y){}
}; vector<V> c;
int main(){
ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
cin >> n;
for(int i = 1; i <= n; ++i) cin >> ca[i], ans += ca[i];
sort(ca + 1, ca + n + 1, greater<int>());
V nw(ca[1], 0);
for(int i = 1; i <= n; ++i){
if(ca[i] == nw.a) ++nw.c;
else c.emplace_back(nw), nw = V(ca[i], 1);
}
c.emplace_back(nw);
int sum = 0; priority_queue<llt, vector<llt>, greater<llt>> que;
stack<llt> lq;
for(auto k : c){
int p = min(sum - int(que.size() * 2), k.c);
for(int i = 1; i <= p; ++i)
lq.emplace(k.a);
p = min(sum - p, k.c - p);
for(int i = 1; i <= p; i += 2){
llt t = que.top();
if(t < k.a){
lq.emplace(k.a);
if(i < p) lq.emplace(k.a);
}else{
lq.emplace(t);
if(k.a * 2 > t && i < p)
lq.emplace(k.a * 2 - t);
}
que.pop();
}
sum += k.c;
while(!lq.empty()) que.emplace(lq.top()), lq.pop();
}
while(!que.empty()) ans -= que.top(), que.pop();
cout << ans;
}
P
自己发现重点。
本文来自博客园,作者:5k_sync_closer,转载请注明原文链接:https://www.cnblogs.com/xrlong/p/18653226
版权声明:本作品采用 「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0) 进行许可。