博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ-3505-数三角形-CQOI2014
阅读量:5055 次
发布时间:2019-06-12

本文共 515 字,大约阅读时间需要 1 分钟。

描述

给定一个nxm的网格, 请计算三点都在格点上的三角形共有多少个.


分析

  • 三角形的三个顶点不能共线. 这是入手点.
  • 下面来考虑一个问题, 原点到点(x,y)之间的线段上有几个整点
    • 如果把x, y同除以一个数g保证结果是整数, 那么(x/g, y/g)一定是原点到(x,y)的线段上的整点
    • 原点到(x,y)的线段上的整点中 每两个相邻的之间的距离相等. 而且等于原点到第一个点的距离.
    • 那么找到第一个点就可以知道共有几个了. 比如第一个点(x0,y0). 那么一共x/x0个点.
    • 第一个点, 也就是横纵坐标最小的, 就是g最大的. g最大是gcd(x,y). 第一个点的横坐标就是x/gcd(x,y). 带到上面一共gcd(x,y)个整点. 这些点中包含了(x,y).
  • 如果不考虑三点共线的情况, 共tot = (m+1)*(n+1)个点, 一共的方案数是C(tot, 3)种.
  • 然后就可以枚举从原点出发的向量(x,y), 用gcd算出原点到点(x,y)之间的线段上有几个整点. 然后计算有几个等于(x,y)的向量. 相乘.

代码

转载于:https://www.cnblogs.com/wfwbz/p/4355830.html

你可能感兴趣的文章
Halcon一日一练:图像拼接技术
查看>>
iOS设计模式 - 中介者
查看>>
centos jdk 下载
查看>>
HDU 1028 Ignatius and the Princess III(母函数)
查看>>
(转)面向对象最核心的机制——动态绑定(多态)
查看>>
token简单的使用流程。
查看>>
django创建项目流程
查看>>
Vue 框架-01- 入门篇 图文教程
查看>>
多变量微积分笔记24——空间线积分
查看>>
poi操作oracle数据库导出excel文件
查看>>
(转)Intent的基本使用方法总结
查看>>
Windows Phone开发(24):启动器与选择器之发送短信
查看>>
JS截取字符串常用方法
查看>>
java容器---------手工实现Linkedlist 链表
查看>>
three.js 性能优化的几种方法
查看>>
《梦断代码》读书笔记(三)
查看>>
FreeMarker解析json数据
查看>>
Java8 Lambda表达应用 -- 单线程游戏server+异步数据库操作
查看>>
次序+“选择不重复的记录”(3)——最大记录
查看>>
Codeforces 450 C. Jzzhu and Chocolate
查看>>