
sdnu1334.Jason's Water Problem(多边形面积)
问题分析:我们需要计算多边形的面积,并将其乘以二,然后对结果取模。多边形的顶点按顺时针或逆时针顺序给出。 鞋带定理:鞋带定理可以通过计算每个相邻顶点的行列式来求面积。具体来说,面积是这些行列式和的绝对值的一半。由于题目要求乘以二,所以我们只需要计算这些行列式和。 处理负数和取模:由于行列式和可能为负数,我们需要处理负数情况,并对结果取模。 读取输入:首先读取多边形的顶点数n,然后读取每个顶点的坐标。 初始化点数组:使用结构体Point存储每个顶点的坐标,索引从1开始以便循环处理。 计算行列式和:遍历每个顶点,计算每个相邻顶点的行列式和,并累加到总和中。每一步都对结果取模以防止溢出。 处理负数和取模:将总和对mod取模,处理负数情况。 乘以二并输出结果:将结果乘以二,然后对结果取模后输出。
发布日期:2021-05-04 18:26:48
浏览次数:44
分类:精选文章
本文共 1217 字,大约阅读时间需要 4 分钟。
为了解决这个问题,我们需要计算给定多边形的面积,并将其乘以二,然后对结果取模。我们将使用鞋带定理来计算多边形的面积。
方法思路
解决代码
#includeusing namespace std;struct Point { long long x, y;};const long long mod = 1000000007;int main() { long long n; while (scanf("%lld", &n) != EOF) { Point points[n + 1]; for (int i = 1; i <= n; ++i) { scanf("%lld%lld", &points[i].x, &points[i].y); } long long ans = 0; for (int i = 1; i <= n; ++i) { long long x = points[i].x; long long y = points[i].y; long long x1 = points[i + 1].x; long long y1 = points[i + 1].y; ans += (x * y1 - x1 * y); ans %= mod; } ans = (ans % mod + mod) % mod; // 处理负数情况 ans = (ans * 2) % mod; // 计算两倍面积 cout << ans << endl; } return 0;}
代码解释
这个方法高效且准确,能够处理大范围的数据,并正确处理负数情况。
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年04月16日 12时39分55秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
cmp命令
2019-03-06
Linux 磁盘管理(df fu fdisk mkfs mount)
2019-03-06
老Python总结的字典相关知识
2019-03-06
jQuery的事件绑定与触发 - 学习笔记
2019-03-06
Linux上TCP的几个内核参数调优
2019-03-06
记一次讲故事机器人的开发-我有故事,让机器人来读
2019-03-06
seo 回忆录百度基本概念(一)
2019-03-06
netcore中使用session
2019-03-06
Android 开发学习进程0.25 自定义控件
2019-03-06
多媒体文件格式全解说(下)--图片
2019-03-06
淘宝WAP版小BUG分析
2019-03-06
asp.net打印网页后自动关闭网页【无需插件】
2019-03-06
【Maven】POM基本概念
2019-03-06
【Java思考】Java 中的实参与形参之间的传递到底是值传递还是引用传递呢?
2019-03-06
【设计模式】单例模式
2019-03-06
远程触发Jenkins的Pipeline任务的并发问题处理
2019-03-06
Web应用程序并发问题处理的一点小经验
2019-03-06
entity framework core在独立类库下执行迁移操作
2019-03-06
Asp.Net Core 2.1+的视图缓存(响应缓存)
2019-03-06