codeforces613A - Peter and Snow Blower汕头市队赛

2023-10-14 02:30

本文主要是介绍codeforces613A - Peter and Snow Blower汕头市队赛,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

上的是汕头市队赛的题面

区别只有数据范围和输出

C 秀恩爱 SRM 06

背景&&描述
KPM坐在直升机上俯瞰小渔村景象。
渔村可看作二维平面,密密麻麻地到处都是单身狗,KPM当前所在坐标为(sx,sy)。
KPM的后宫团们自发地聚集在一起为他送行,从空中看,后宫团形成了一个多边形。
当然了KPM是不在那个多边形内的。
直升机突然开始原地转圈,后宫团们因为想看着KPM的正脸,所以也跟着以KPM所在坐标为中心旋转。
后宫团所经之处单身狗尸横遍野。赶来救治伤员的医护人员想知道,多边形扫过的面积是多少。
注意,本题不保证横坐标互不相同、纵坐标互不相同什么的。
请注意运算过程中可能出现的/0等问题。
输入格式

        第一行三个整数,n,sx,sy。n表示多边形的顶点数。

        接下来n行每行俩整数,分别表示多边形一个顶点的横纵坐标。

        (顶点是按照顺时针或者逆时针顺序给出的,并且所有点的坐标绝对值<=10^6,保证不存在共线的三个顶点)

输出格式

一个整数,表示面积四舍五入为整数的结果。

样例输入
3 0 0
0 1
-1 2
1 2
样例输出
13
数据范围与约定
  • 对于100%的数据:3\leq n \leq 50
样例解释






































































一道想明白就不难的题

但是有很多卡点

很明显发现扫的面积是一个大圆减去小圆

刚开始很容易误以为大圆的半径就是离圆心最远的顶点,小圆的半径就是离圆心最近的

交上去就WA了

刚开始一直想不明白为啥

后来随手造了几组数据就发现了

离圆心最近的点可能不是顶点

而是到边的垂线段的端点

接下来就是数学了

求出那个点到圆心的距离

这个大家可以去学习高中人教版数学必修二(捂脸)

但是一个大坑点:斜率为0!!!

还好我写完随手造了几个数据发现判掉了

这告诉我们写完代码随手造几个小数据手算是一个多么好的习惯

之前一直没有养成

以后一定要这样

然而———我还是WA了

其他人都是没有判除0

我虽然判了但是并没有什么卵用(一脸不爽)

因为我前面算两点距离是爆int了

哇啊啊啊啊啊

多少次爆intWA了啊

怎么就不吸取教训啊

以后看见乘法一定要注意开longlong啊(哭唧唧)

最后还有一个坑点是π的精度

开太低不行

计算器上有

大家可以抄过来

#include<cstdio>
#include<cmath>
const  double pie=3.14159265358979323846264338327950288419716939937510,eps=1e-10;
struct node
{int x,y;
}e[100007];
int main()
{int n;long long sx,sy;scanf("%d %lld %lld",&n,&sx,&sy);long long p,q;double   min=2*1e14,max=0;int prex,prey;for(int i=1;i<=n;i++){scanf("%lld %lld",&p,&q);e[i].x=p,e[i].y=q;double  dis=(p-sx)*(p-sx)+ (q-sy)*(q-sy);if(dis>max)	max=dis;if(dis<min) min=dis;}prex=e[n].x;prey=e[n].y;for(int i=1;i<=n;i++){p=e[i].x,q=e[i].y;if(p-prex==0){double tar=p,tary=sy;if(tary-(prey>q?prey:q)<=eps&& tary-(prey<q?prey:q)>=eps  ){double  dis=(tar-sx)*(tar-sx)+ (tary-sy)*(tary-sy);if(dis<min)min=dis;}}else if(q-prey==0){double tar=sx,tary=q;if(tar-(prex>p?prex:p)<=eps&& tar-(prex<p?prex:p)>=eps  )	{double  dis=(tar-sx)*(tar-sx)+ (tary-sy)*(tary-sy);if(dis<min)		min=dis;}}else{double xie=(q-prey)*1.0/(p-prex);double xie2=-1.0/xie;double b2=(double)sy-xie2*sx;double b1=(double)q-xie*p;double tar=(b2-b1)/(xie-xie2);if(tar-(prex>p?prex:p)<=eps&& tar-(prex<p?prex:p)>=eps  )	{double 	tary=xie2*tar+b2;double  dis=(tar-sx)*(tar-sx)+ (tary-sy)*(tary-sy);if(dis<min)min=dis;}}prex=p,prey=q;}double k=pie*(max-min);printf("%.12lf",k);return 0;
}


转载于:https://www.cnblogs.com/Brian551/p/7353011.html

这篇关于codeforces613A - Peter and Snow Blower汕头市队赛的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/207507

相关文章

哈希—— POJ 3349 Snowflake Snow Snowflakes

对应POJ题目:点击打开链接 Snowflake Snow Snowflakes Time Limit: 4000MS Memory Limit: 65536KTotal Submissions: 33595 Accepted: 8811 Description You may have heard that no two snowflakes are alike. Y

90 Realistic Arctic Environment Textures snow(90+种逼真的北极环境纹理--雪、冰及更多)

一组90多个逼真的雪、冰、雪地岩石和其他被雪覆盖的地面纹理,供在雪地环境中使用。每个纹理都是可贴的/无缝的,并且完全兼容各种不同的场景--标准的Unity地形、Unity标准着色器、URP、HDRP等等都兼容。 所有的纹理都是4096x4096,并包括一个HDRP掩码,以完全支持HDRP。 特点。 95种质地 95种材料 95个地形图层 反照率、环境遮蔽、高度、正常、平滑度和HDRP蒙版 40

poj3349 Snowflake Snow Snowflakes

大致题意: 在n (n<100000)个雪花中判断是否存在两片完全相同的雪花,每片雪花有6个角,每个角的长度限制为1000000  两片雪花相等的条件: 雪花6个角的长度按顺序相等(这个顺序即可以是顺时针的也可以是逆时针的) 大概思路: 用连加求余法求key值(用同余定理简化),链地址法解决冲突 写好左旋转模块和右旋转模块,进行地址冲突之后的比较 边插入边比较

Peter算法小课堂—序列切割

讲序列切割之前,先来个铺垫 高手集训 题目描述: 课程表里有连续的n天可以供你选择,每天都有专题课程。其中第i天的专题趣味程度为h[i]。假设你选择了其中连续的若干天,从第l天到第r天。那么, 训练效果 = h[l]*1 + h[l+1]*2 + ... + h[r]*(r-l+1) 随着训练的深入进行,每天的趣味程度会得到更多倍数的效果。 目前有m种训练方案,每种方案由起始时间和

POJ 3349 Snowflake Snow Snowflakes hash

题意:每个雪花有六个角,每个角用一个数字表示。输入n个雪花,若存在两个雪花相等则输出Twin snowflakes found。否则输出No two snowflakes are alike. 题解:hash #include <iostream>#include <cstdlib>using namespace std;#define Prime 14997struct ListNode

Peter算法小课堂—动态规划斜率优化

大家来到这一堂课,就说明大家已经学过函数了 直线方程:y=kx+b 大家可以算一算。 其实,在数学上,这玩意要分类讨论 那么,这唯一的交点就是我们要背出来的 直线最值 这像一个分段函数 其实,只有部分直线能提供最小值,另外的,就可以省略 当然,最大值也一样。 看一下太戈编程第2627题 题目 在平面直角坐标系里,横坐标为x,纵坐标为y。有n条直线,第i

Peter算法小课堂—线性dp

今天,你读完这篇文章,普及组的动态规划已经可以秒了。 最长公共子序列 求两个数列的最长公共子序列(Longest Common Subsequence,LCS)的长度。 数列 X 和 Y 的最长公共子序列 Z,是指 Z 既是 X 的子序列,又是 Y 的子序列,而且任意长度超过 Z 的数列 Z∗ 都不符合这个性质。 状态定义 f[i][j]表示x[1]、x[2]……x[i]和y[1]、y[

Peter算法小课堂—树状数组

大家好,我是人见人爱,花见花开,车见车爆胎的树状数组Peter Pan,hhh 讲正文前,先来一个长文警告⚠很重要的知识点:L SB(SB?) LSB 怎么算呢? 哦……懂了,代码应该长这样 int lowbit(int n){ return n&(-n);} 来,既然懂了,给大家做一道题吧 答案应该是B啊 二进制索引树(树状数组) 那么,我们如果用我们学过的算法

Snowflake Snow Snowflakes (POJ - 3349 ,Hash表查找)

一.题目链接: POJ-3349 二.题目大意: 有 n 片雪花,每片雪花有六个角,若六个角均相同,则称两片雪花相等. 雪花六个角的记录可能顺时针,可能逆时针,开始点不确定. 让你判断是否存在两片相同的雪花. 三.分析: 居然还有考 Hash 表的题 一直觉得数据结构课本很鸡肋 题目不难,这里只是存个板子. 哈希函数选用除留余数法,利用链地址法处理冲突. 四.代码实现: #i

Snow Boots 题解

题面: 翻译: 有一天早上,下了一场大雪 农夫起床要从家里去牛栏,路上堆了很多积雪 可以把路当成几个格子,每个格子上面有不同高度的积雪 由于屋檐的存在,起点(农户家)和终点(牛栏)是没有积雪的. 农夫有一些鞋子,分别可以克服一定程度的积雪,每双鞋子一步可以走的最大距离也已经给定 由于农夫背包的特殊结构,他只能从背包中按顺序拿鞋子,每次拿出一双鞋子他可以做出以下选择: 1.扔掉,刷新下一双