二分判定 覆盖问题 BZOJ 1052

本文介绍了解决BZOJ1052问题的方法,通过确定最小矩形来覆盖所有点,并利用二分查找确定最优正方形大小。文章详细展示了如何枚举每个角并逐步缩小搜索范围,最终找到满足条件的最小正方形边长。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 1 //二分判定 覆盖问题 BZOJ 1052
 2 // 首先确定一个最小矩阵包围所有点,则最优正方形的一个角一定与矩形一个角重合。
 3 // 然后枚举每个角,再解决子问题
 4 
 5 #include <bits/stdc++.h>
 6 using namespace std;
 7 #define LL long long
 8 typedef pair<int,int> pii;
 9 const int inf = 1e9;
10 const int MOD =5010;
11 const int N =5010;
12 #define clc(a,b) memset(a,b,sizeof(a))
13 const double eps = 1e-8;
14 void fre() {freopen("in.txt","r",stdin);}
15 void freout() {freopen("out.txt","w",stdout);}
16 inline int read() {int x=0,f=1;char ch=getchar();while(ch>'9'||ch<'0') {if(ch=='-') f=-1; ch=getchar();}while(ch>='0'&&ch<='9') {x=x*10+ch-'0';ch=getchar();}return x*f;}
17   
18 struct node{
19     int x[20010],y[20010];
20     int num;
21 }a,b;
22 int n,mid;
23   
24 void solve2(node &a,int x1,int y1,int x2,int y2){
25     int cnt=0;
26     for(int i=0;i<a.num;i++){
27         if(a.x[i]<x1||a.x[i]>x2||a.y[i]>y2||a.y[i]<y1){
28             a.x[cnt]=a.x[i];
29             a.y[cnt]=a.y[i];
30             cnt++;
31         }
32     }
33     a.num=cnt;
34 }
35 void solve(node &a,int f){
36     int x1=inf,x2=-inf,y1=inf,y2=-inf;
37     for(int i=0;i<a.num;i++){
38         x1=min(x1,a.x[i]);
39         x2=max(x2,a.x[i]);
40         y1=min(y1,a.y[i]);
41         y2=max(y2,a.y[i]);
42     }
43     if(f==1) solve2(a,x1,y1,x1+mid,y1+mid);
44     if(f==2) solve2(a,x2-mid,y1,x2,y1+mid);
45     if(f==3) solve2(a,x1,y2-mid,x1+mid,y2);
46     if(f==4) solve2(a,x2-mid,y2-mid,x2,y2);
47 }
48 bool check(){
49     for(int s=1;s<=4;s++){
50         for(int t=1;t<=4;t++){
51             b.num=a.num;
52             for(int i=0;i<b.num;i++){
53                 b.x[i]=a.x[i],b.y[i]=a.y[i];
54             }
55             solve(b,s),solve(b,t);
56             int x1=inf,x2=-inf,y1=inf,y2=-inf;
57             for(int i=0;i<b.num;i++){
58                 x1=min(x1,b.x[i]);
59                 x2=max(x2,b.x[i]);
60                 y1=min(y1,b.y[i]);
61                 y2=max(y2,b.y[i]);
62             }
63             if(x2-x1<=mid&&y2-y1<=mid) return true;
64         }
65     } 
66     return false;
67 }
68 int main(){
69     n=read();
70     for(int i=0;i<n;i++) a.x[i]=read(),a.y[i]=read();
71     a.num=n;
72     int l=0,r=inf;
73     while(l<=r){
74         mid=(l+r)>>1;
75         if(check()) r=mid-1;
76         else l=mid+1;
77     }
78     printf("%d\n",l);
79     return 0;
80 }

 

转载于:https://www.cnblogs.com/ITUPC/p/5931504.html

内容概要:本文针对国内加密货币市场预测研究较少的现状,采用BP神经网络构建了CCi30指数预测模型。研究选取2018年3月1日至2019年3月26日共391天的数据作为样本,通过“试凑法”确定最优隐结点数目,建立三层BP神经网络模型对CCi30指数收盘价进行预测。论文详细介绍了数据预处理、模型构建、训练及评估过程,包括数据归一化、特征工程、模型架构设计(如输入层、隐藏层、输出层)、模型编译与训练、模型评估(如RMSE、MAE计算)以及结果可视化。研究表明,该模型在短期内能较准确地预测指数变化趋势。此外,文章还讨论了隐层节点数的优化方法及其对预测性能的影响,并提出了若干改进建议,如引入更多技术指标、优化模型架构、尝试其他时序模型等。 适合人群:对加密货币市场预测感兴趣的研究人员、投资者及具备一定编程基础的数据分析师。 使用场景及目标:①为加密货币市场投资者提供一种新的预测工具和方法;②帮助研究人员理解BP神经网络在时间序列预测中的应用;③为后续研究提供改进方向,如数据增强、模型优化、特征工程等。 其他说明:尽管该模型在短期内表现出良好的预测性能,但仍存在一定局限性,如样本量较小、未考虑外部因素影响等。因此,在实际应用中需谨慎对待模型预测结果,并结合其他分析工具共同决策。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值