TLE求调,悬关

P1824 进击的奶牛

在这改下 ```cpp #include<bits/stdc++.h> using namespace std; int n,c,a[100010]; int find(int mid){ int num=0,i=0,cnt=0; while(i<n){ i++; if(a[i]-a[num]<=mid) cnt++; else num=i; } return cnt<=n-c; } int main(){ scanf("%d%d",&n,&c); for(int i=1;i<=n;i++)cin>>a[i]; sort(a+1,a+1+n); long long l=0,r=n+1,mid=(l+r)>>1; while(l<r){ if(find(mid)) l=mid; else r=mid; } printf("%lld",l); return 0; } ```
by lucy2012 @ 2024-03-19 20:35:51


@[lucy2012](/user/1252442) 改成如下可以避免 TLE(mid 要实时更新) 但是显然其他地方还有问题 ```cpp #include<bits/stdc++.h> using namespace std; int n,c,a[100010]; int find(int mid){ int num=0,i=0,cnt=0; while(i<n){ i++; if(a[i]-a[num]<=mid) cnt++; else num=i; } return cnt<=n-c; } int main(){ scanf("%d%d",&n,&c); for(int i=1;i<=n;i++)cin>>a[i]; sort(a+1,a+1+n); long long l=0,r=n+1; long long ans = 0; while(l<=r){ long long mid=(l+r)>>1; if(find(mid)) { l = mid + 1; ans = mid; } else r = mid - 1; } printf("%lld",ans); return 0; } ```
by Acerakoi @ 2024-03-19 20:42:29


@[Acerakoi](/user/514850) 改成为下面什么又TLE了? ```cpp #include<bits/stdc++.h> using namespace std; int n,c,a[100010]; int find(int mid){ int num=0,i=0,cnt=0; while(i<n){ i++; if(a[i]-a[num]<=mid) cnt++; else num=i; } return cnt<=n-c; } int main(){ scanf("%d%d",&n,&c); for(int i=1;i<=n;i++)cin>>a[i]; sort(a+1,a+1+n); long long l=0,r=n+1; long long ans = 0; while(l<=r){ long long mid=(l+r)>>1; if(find(mid)) { l = mid;//这 ans = mid; } else r = mid;//还有这 } printf("%lld",ans); return 0; } ```
by lucy2012 @ 2024-03-19 21:05:55


@[lucy2012](/user/1252442) 注意 while() 条件 建议深度理解二分条件
by Acerakoi @ 2024-03-19 21:07:22


@[Acerakoi](/user/514850) 这样还是TLE ```cpp #include<bits/stdc++.h> using namespace std; int n,c,a[100010]; int find(int mid){ int num=0,i=0,cnt=0; while(i<n){ i++; if(a[i]-a[num]<=mid) cnt++; else num=i; } return cnt<=n-c; } int main(){ scanf("%d%d",&n,&c); for(int i=1;i<=n;i++)cin>>a[i]; sort(a+1,a+1+n); long long l=0,r=n+1; long long ans = 0; while(l<r){ long long mid=(l+r)>>1; if(find(mid)) { l = mid; ans = mid; } else r = mid; } printf("%lld",ans); return 0; } ``` (蒟蒻思维有限
by lucy2012 @ 2024-03-19 21:11:42


@[lucy2012](/user/1252442) 再理解一下? /xk https://oi-wiki.org/basic/binary/
by Acerakoi @ 2024-03-19 21:20:48


这样错的 ```cpp #include<bits/stdc++.h> using namespace std; int n,c,a[100010]; int find(int mid){ int k=0,last=-1;//int k=0,last=-1000000就对了 for(int i=1;i<=n;i++){ if(a[i]-last>=mid){ last=a[i]; k++; } } return k>=c; } int main(){ scanf("%d%d",&n,&c); for(int i=1;i<=n;i++)cin>>a[i]; sort(a+1,a+1+n); long long l=0,r=1000000010,mid,ans; while(l<=r){ mid=l+r>>1; if(find(mid)) l=mid+1,ans=mid; else r=mid-1; } printf("%lld",ans); return 0; } ``` 为什么
by lucy2012 @ 2024-03-20 16:49:49


|