Problem Analysis
题目大意转述:给你一个无限延伸的网格的长和宽,现在有一条固定长度的绳子(长为 π \pi π),绳子可以摆成任意形状,求放到网格上去最多能经过的网格数目。
首先要确定绳子怎么摆才能达到这个目的:我们要经过近可能多的点,那么要经过尽可能多的顶点,而经过定点分为两种情况:
在左侧的情况中,经过上面的点时,利用绳子无限小数部分向四个格子延展出一点点,可以使绳子穿过四个格子;而竖着向下走,再统计下一个点的情况时,我们可以发现途中蓝色阴影部分的两个格子是被重复统计的
在右侧的情况中,同样经过两个点,我们发现被重复统计的点只有一个。但是相比于第一种走法,它需要耗费更长的长度。
那么为了保证同一长度能够覆盖尽可能多的格子,我们有两种可供选择的方案:我们先举一个例子
很显然,在这个例子中全直着走,全斜着走能覆盖的方格数目均不是最多的,直着走会因为重复统计而使产生过多无意义贡献;斜着走会因为长度限制而无法到达第三个点,从而导致放个覆盖数目减少。因此我们需要两者进行组合,那么就用两种方案
- 尽可能直着走,如果直着走到最后无法到达下一个点,考虑去除最后一个经过点改成斜着走
- 尽可能斜着走,①走到最后判断剩余的长度是否够一条直边,②去掉最后经过点改成直着走能否经过两个点
剩下的就是注意控制精度误差等等了。
AC Code
#include
using namespace std;
const double pi = acos(-1);
inline int solve(){
double x, y; cin >> x >> y;
double cro = sqrt(x * x + y * y);
if (x > y) x = y;
if (x > pi) return cout
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?