题解 CF2207B One Night At Freddy's
题解 CF2207B One Night At Freddy's
其他题(几天后完工)
自评:橙\~黄(本题)黄(Bonus)。
挺久没见过《玩具熊的五夜后宫》相关了。想当年各 scratch 网站上面还有一车人在复刻来着。
题意
给定
数据范围:多测,
Bonus(By 我自己):去掉最后一个限制。
做法
玩家的策略是很显然的:既然要最小化最大值,那就每次对着最大的干。
于是对面的策略也是很显然的:尽可能平均地点各个熊来避免亏损。
但是只是这么做肯定有问题,比如我最后一次闪完了再平均点就没用了,不如对着一个点。
于是其实对面准确的策略应该是,如果玩家当前剩
于是拿个 multiset 维护一下即可。单组复杂度
小技巧是你开局就只放
另外感觉应该可以有更大的 Bonus(比如
//Please ignore those headfiles.I write them just because
//DEV-C++ won't support completion if i use <bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<cmath>
#include<cctype>
#include<string>
#include<algorithm>
#include<vector>
#include<map>
#include<unordered_map>
#include<set>
#include<queue>
#define ll long long
#define ull unsigned long long
#define lf double
#define ld long double
#define LL __int128
#define ui unsigned int
using namespace std;
ll T,n,m,l,a[200010],b[200010];
multiset<ll> s;
int main(){
ios::sync_with_stdio(0);
cin>>T;
while(T--){
cin>>n>>m>>l;
for(int i=0;i<n;i++){
cin>>a[i];
}
s.clear();
for(int i=0;i<min(n+1,m);i++){
s.insert(0);
}
ll pos=0;
multiset<ll>::iterator it;
for(int i=0;i<n;i++){
while(pos<a[i]){
pos++;
s.insert((*s.begin())+1);
s.erase(s.begin());
}
it=s.end();
it--;
s.erase(it);
if(n-i>s.size()){
s.insert(0);
}
}
it=s.end();
it--;
cout<<(*it)+(l-pos)<<endl;
}
return 0;
}