This commit is contained in:
Zengtudor 2024-10-13 18:36:18 +08:00
parent f2cd24bdad
commit eb5fc7aab6
4 changed files with 500037 additions and 2 deletions

View File

@ -44,4 +44,20 @@ void bfs(){
for(ll coin{0};coin<=(points[n].posit-d);++coin){
for(ll i{0};i<max_n;i++)dp[i]=ll_min;
dp[0]=0; // 注意第0个点是能到达的reachable
```
#### 非最优解时注意骗分卡时间
```cpp
const ll max_coin{(ll)1e5+5};//d+g = x[n] -> g = x[n]-d我的推导是这样的但是错了必须将max_coin设置为1e5+5也就是s[i]最大值,注意超时问题,可以自己生成样例测试
ll l{0},r{max_coin},ans{ll_max};
while(l<=r){
ll mid{(l+r)/2};
const bool check_ret{check(mid)};
if(check_ret){
ans = mid;
r=mid-1;
}else{
l=mid+1;
}
}
```

View File

@ -1,11 +1,24 @@
#define NDEBUG
#include <cstring>
#include <fstream>
#include <iostream>
#include <algorithm>
#include <limits>
#define NV(v)#v<<" : "<<(v)
#ifdef NDEBUG
#define DEBUG(code)
#else
#define DEBUG(code){code}
#endif
using ll = long long;
auto &is = std::cin;
#ifdef NDEBUG
auto &is = std::cin;
#else
auto is = std::ifstream("/root/dev/cpp/algorithm_2024/src/P3957/P3957_9.in");
#endif
auto &os = std::cout;
const ll max_n = 5e5+5, ll_min{std::numeric_limits<decltype(ll_min)>::min()},
@ -50,7 +63,8 @@ int main(){
is>>points[i].posit>>points[i].score;
}
const ll max_coin{points[n].posit-d};//d+g = x[n] -> g = x[n]-d
// const ll max_coin{(ll)1e9+5};//d+g = x[n] -> g = x[n]-d我的推导是这样的但是错了必须将max_coin设置为1e5+5也就是s[i]最大值会TLE最终研究了一下应该是作者卡时间
const ll max_coin{std::min(std::max(d-1,points[n].posit-d),(ll)1e4)};//d+g = x[n] -> g = x[n]-d我的推导是这样的但是错了必须将max_coin设置为1e5+5也就是s[i]最大值会TLE最终研究了一下应该是作者卡时间
ll l{0},r{max_coin},ans{ll_max};
while(l<=r){
ll mid{(l+r)/2};
@ -61,6 +75,9 @@ int main(){
}else{
l=mid+1;
}
DEBUG(
os<<NV(l)<<"\t"<<NV(r)<<'\n';
)
}
os<<(ans==ll_max?-1:ans)<<'\n';

500001
src/P3957/P3957_9.in Normal file

File diff suppressed because it is too large Load Diff

1
src/P3957/P3957_9.out Normal file
View File

@ -0,0 +1 @@
450