cf 320# A Problem about Polyline (二分)

题目:http://codeforces.com/problemset/problem/578/A

题意:给定一种波形 (0, 0) – (x, x) – (2x, 0) – (3x, x) – (4x, 0) – ... - (2kx, 0) – (2kx + x, x) – ....,求出最小的x,使得整点s(a,b)在波形上,不存在x则输出-1。


分析:若存在一点p(2kx,0),使得点p(2kx,0)与点s(a,b)的斜率k=1或者-1,那么就有解,即a+b=2kx或者a-b=2kx,k为整数。然后二分区间就行了。

代码:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;

const double AE = 1e-13;

bool ok(int m1,int m2,double x1,double x2)//x1~x2
{
	double p1,p2;
	long long t1,t2;
	p1=(m1+m2)/(2*x1);
	p2=(m1+m2)/(2*x2);
	t1=p1=floor(p1+AE);
	t2=p2=ceil(p2);
	if(t1>=t2)
		return true;
	
	p1=(m1-m2)/(2*x1);
	p2=(m1-m2)/(2*x2);
	t1=p1=floor(p1+AE);
	t2=p2=ceil(p2);
	if(t1>=t2)
		return true;
	return false;
}

double Find(int m1,int m2)
{
	double ret=1e19,down=m2,up=1e18,mid;
	for(int i=0;i<100000;i++)
	{
		mid=(down+up)/2.0;
		if(ok(m1,m2,down,mid))
			up=mid;
		else
			down=mid;
	}
	return mid;
}
int main()
{
	int m1,m2;
	scanf("%d%d",&m1,&m2);
	
	if(m1<m2)
	{
		printf("-1\n");
		return 0;
	}
	double ans=Find(m1,m2);
	if(ans>1e17)
	{
		printf("-1\n");
		return 0;
	}
	printf("%.13lf\n",ans);
	return 0;
}

AMap.Polyline是“高德地图”JavaScript API中用于绘制折线图层的类。通过AMap.Polyline,开发者可以在地图上实时绘制和更新折线,以展示路径、轨迹等信息。以下是使用AMap.Polyline实时绘制折线的基本步骤: 1. **引入高德地图API**:首先,需要在HTML文件中引入高德地图的JavaScript API。 ```html <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>AMap.Polyline实时绘制示例</title> <script src="https://webapi.amap.com/maps?v=2.0&key=您的高德地图API密钥"></script> </head> <body> <div id="mapContainer" style="width: 600px; height: 400px;"></div> <script src="script.js"></script> </body> </html> ``` 2. **初始化地图**:在JavaScript文件中初始化地图。 ```javascript // script.js var map = new AMap.Map(&#39;mapContainer&#39;, { center: [116.397428, 39.90923], // 地图中心点坐标 zoom: 13 // 地图缩放级别 }); ``` 3. **创建折线对象**:创建一个AMap.Polyline对象,并添加到地图上。 ```javascript // 创建一个折线对象 var polyline = new AMap.Polyline({ path: [ [116.397428, 39.90923], [116.406605, 39.916527], [116.412222, 39.920256] ], strokeColor: "#FF33FF", // 线颜色 strokeOpacity: 1, // 线透明度 strokeWeight: 6, // 线宽 strokeStyle: "solid", // 线样式 strokeDasharray: [10, 5] // 补充线样式 }); // 将折线添加到地图上 map.add(polyline); ``` 4. **实时更新折线**:通过更新折线的路径(path)属性,实现实时绘制。 ```javascript // 模拟实时更新的数据 var newPath = [ [116.397428, 39.90923], [116.406605, 39.916527], [116.412222, 39.920256], [116.419322, 39.923828] ]; // 更新折线的路径 polyline.setPath(newPath); ``` 通过上述步骤,您可以在高德地图上实时绘制和更新折线。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值