cf 1301b Motarack's Birthday
题目大意:
给你n个数,有些数是未知的,要求给未知数的赋值,使得相邻两个数的最大绝对值最小。
思路:
本题可以三分。
1 #include<bits/stdc++.h> 2 using namespace std; 3 int const N=2e5+10; 4 int a[N],n,t; 5 int calc(int mid){ 6 int ret=0; 7 for(int i=1;i<n;i++) 8 if(a[i]==-1 && a[i+1]!=-1) 9 ret=max(ret,abs(mid-a[i+1])); 10 else if(a[i]!=-1 && a[i+1]==-1) 11 ret=max(ret,abs(mid-a[i])); 12 else if(a[i]!=-1 && a[i+1]!=-1) 13 ret=max(ret,(int)abs(a[i]-a[i+1])); 14 return ret; 15 } 16 int main(){ 17 scanf("%d",&t); 18 while (t--){ 19 scanf("%d",&n); 20 for(int i=1;i<=n;i++) 21 scanf("%d",&a[i]); 22 int l=0,r=1e9; 23 while (l<r-10){ 24 int mid1=l+(r-l)/3; 25 int mid2=l+(r-l)/3*2; 26 int t1=calc(mid1); 27 int t2=calc(mid2); 28 if(t1>=t2) 29 l=mid1; 30 else 31 r=mid2; 32 } 33 int ans=1e9+10,x; 34 for(int i=l;i<=r;i++){ 35 int t=calc(i); 36 if(t<ans) 37 ans=t,x=i; 38 } 39 cout<<ans<<" "<<x<<endl; 40 } 41 return 0; 42 }
分类:
信息学竞赛 / codeforces
, 信息学竞赛 / 三分
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】博客园携手 AI 驱动开发工具商 Chat2DB 推出联合终身会员
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 为什么 .NET8线程池 容易引发线程饥饿
· golang自带的死锁检测并非银弹
· 如何做好软件架构师
· 记录一次线上服务OOM排查
· Linux实时系统Xenomai宕机问题的深度定位过程
· 2025年广告第一单,试试这款永久免费的开源BI工具
· o3 发布了,摔碎了码农的饭碗
· SQL优化的这15招,真香!
· [.NET] API网关选择:YARP还是Ocelot?
· 将 EasySQLite 从 .NET 8 升级到 .NET 9
2019-03-14 hihocoder 1193 树堆