三分
1.【算法学习】排序2.【算法学习】Manacher 马拉车3.【算法学习】KMP 算法4.LCA 最近公共祖先(树链和倍增)这次真有树链了!!!5.线段覆盖问题6.【算法学习】学换根dp有感7.二分图最大匹配8.【算法学习】01BFS9.洛谷 P1892 [BOI2003] 团伙 种类并查集 扩展域并查集10.【算法学习】高斯消元法11.贝叶斯公式12.背包13.【算法学习】模拟退火14.【算法学习】基环树15.【算法学习】树链部分16.【算法学习】莫队17.【算法学习】分块九讲18.平衡树19.圆方树20.【算法学习】点分治21.公式22.【算法学习】笛卡尔树23.【算法学习】悬线法24.欧几里得算法与 EX25.【算法学习】逆元与求解26.【算法学习】费马定理
27.三分
28.裴蜀定理29.【算法学习】欧拉函数φ30.【算法学习】二维转一维问题31.【算法学习】扫描线32.【算法学习】矩阵乘法33.【算法学习】同余最短路34.【算法学习】组合数学35.【算法学习】反悔贪心其实三分和二分实现是一样的,但是为什么我还要写一下呢,因为我没学的时候感觉太可怕了,学了后发现也就那样,所以我要记录一下(水题解)。
每次三分取 \(x\) 判断大小。
#include <bits/stdc++.h> using namespace std; #define ll long long const int N=10005; int t; int n; double a[N],b[N],c[N]; double f(double x,int i){ return x*x*a[i]+x*b[i]+c[i]; } double check(double x){ double ans=0; ans=f(x,1); for(int i=2;i<=n;i++){ ans=max(ans,f(x,i)); } return ans; } void solve(){ cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]>>b[i]>>c[i]; } double l=0,r=1000,eps=1e-11,mid1,mid2; while(r-l>eps){ mid1=l+(r-l)/3.0; mid2=r-(r-l)/3.0; if(check(mid1)>check(mid2)){ l=mid1; } else{ r=mid2; } } printf("%.4lf\n",check(l)); } int main(){ ios::sync_with_stdio(false); cin>>t; while(t--){ solve(); } return 0; }
这个三分又和上面不一样(题解区里面的),但实际都差不多,都是三分取值。
#include <bits/stdc++.h> using namespace std; #define ll long long const int N=10005; int t; int n; double a[N],b[N],c[N]; double f(double x){ double ans=0; for(int i=0;i<=n;i++){ ans=ans*x+a[i]; } return ans; } void solve(){ double l,r,eps=1e-7,mid; cin>>n>>l>>r; for(int i=0;i<=n;i++){ cin>>a[i]; } while(r-l>=eps){ mid=(l+r)/2; if(f(mid+eps)>f(mid-eps)){ l=mid; } else{ r=mid; } } printf("%.5lf\n",r); } int main(){ ios::sync_with_stdio(false); t=1; while(t--){ solve(); } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)