资讯动态

CF1250B The Feast and the Bus

发布时间:2026/8/29 15:32:51 来源:尧图企业网站定制
说明本文主要讲了为什么现在的第二篇使用双指针和贪心的题解不对与正确做法。超时做法咱们先来看他的做法他在这里枚举这辆车的空间从到这是正确的但是我们可以发现这里的数组的值有可能是大小为的所以这个循环本质上是的再配合上双指针时间复杂度可能接近所以会超时。这是超时的代码:#includebits/stdc.h using namespace std; const int N8e35; int n,k,a[N]; long long ansLLONG_MAX; int f(int x){ int cnt0,l1,rk; while(lr){ cnt; if(lr) break; if(lra[l]a[r]x) l,r--; else r--; } return cnt; } int main(){ scanf(%d%d,n,k); for(int i1;in;i){ int x; scanf(%d,x); a[x]; } sort(a1,ak1); for(int ia[k];ia[k-1]a[k];i){ ansmin(ans,1ll*i*f(i)); } printf(%lld,ans); return 0; }## 正解做法第一篇题解码风太奇怪了写一个正常一点的。我们枚举可能的运输次数再用二分枚举最小的是车厢的最小容量其中二分中的函数和上面是差不多的。时间复杂度约为是可以通过的。#includebits/stdc.h using namespace std; const int N8e35; int n,k,a[N]; long long ansLLONG_MAX; int rd() { int x 0, f 1; char ch getchar(); while (ch 0 || ch 9) { if (ch -) f -1; ch getchar(); } while (ch 0 ch 9) { x x * 10 ch - 0; ch getchar(); } return x * f; } bool check(int s,int p){ int cnt0; int l1,rk; while(lr){ cnt; if(lr) break; if(a[l]a[r]s){ l,r--; }else{ r--; } } return cntp; } int main(){ nrd(); krd(); for(int i1;in;i){ int xrd(); a[x]; } sort(a1,ak1); for(int p(k1)/2;pk;p){ int la[k]; int ra[k]a[k-1]; while(lr){ int mid(lr)1; if(check(mid,p)) rmid; else lmid1; } ansmin(ans,1ll*l*p); } printf(%lld,ans); return 0; }

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价