题面

其实这道题不用组合数!不用容斥!

只需要一个gcd和无脑找规律(滑稽

乍一看题目,如果单纯求合法三角形的话情况太多太复杂,我们可以从局部入手,最终扩展到整体。

首先考虑这样的情况:

类似地,我们把三角形三个顶点都在网格边界上,且网格内任意一条线都可以把三角形切成两部分的情况,称为完全覆盖。

下面这种就不算:

不难发现每个顶点在格点上的三角形,都有且仅有一个被它完全覆盖的网格。
所以可将原问题转化为:求出矩形中所有子矩形的完全覆盖三角形数。

又因为完全覆盖三角形数只与子矩形大小有关,与其位置无关,

而且手模一下可以发现

一个\(n*m\)的矩形内,大小为\(i*j\)的子矩形个数为\((n-i+1)*(m-j+1)\)。

所以接下来只要求解一定长宽矩形内 完全覆盖三角形的的个数即可

然后观察可得 (迄今为止我似乎没有用除了观察之外的方法证明过东西)

如果三角形XYZ完全覆盖矩形ABCD,那么它至少有一端点在ABCD的角上。

那么接下来就可以按照 XYZ有几个端点在矩形角上分类讨论。
设矩形长为i,宽为j。

  • 一个端点在角上

角的选择有4种,三角形另外两端点必在两边上,共有\((i-1)*(j-1)\)种。

所以这部分答案为\(4*(i-1)*(j-1)\)

  • 两个端点在角上

第一种:

答案:\(i-1\)

第二种:

答案:\(j-1\)

第三种:

三角形有一条边与矩形对角线重合。

此时三角形剩下那个端点除了四个角以及它的对边上的格点之外,可以随便放。
那么这条对边(即矩形的一条对角线)上有几个格点呢?

\(gcd(i,j)-1\)个。(不包括对边的两个端点)

答案:\((i+1)*(j+1)-4-gcd(i,j)+1\)

  • 三个端点在角上

显然4种。

另外,以上三种情况都可以对称过去得到不同的方案,所以\(*2\)。

化简可得\(ans=6*i*j-2*gcd(i,j)\)

复杂度:\(O(mnlog^{m+n})\)

#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
typedef long long ll;
ll m,n;
int gcd(int x,int y)
{if(!y)return x;return gcd(y,x%y);
}
int main()
{scanf("%lld%lld",&m,&n);ll ans=0;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)ans+=(6*i*j-2LL*gcd(i,j))*(n-i+1)*(m-j+1);cout<<ans<<endl;return 0;
}

本文主要参考:https://www.luogu.org/blog/suwakow/solution-p3166

转载于:https://www.cnblogs.com/Rorschach-XR/p/11233780.html

[CQOI2014]数三角形 题解(找规律乱搞)相关推荐

  1. P3166 [CQOI2014]数三角形(组合数学)

    P3166 [CQOI2014]数三角形(组合数学) 整点三角形个数. 正难则反,求出总方案和共线三角形方案数即可. 总方案:C((n+1)(m+1),3)C((n+1)(m+1),3)C((n+1) ...

  2. bzoj3505 / P3166 [CQOI2014]数三角形

    P3166 [CQOI2014]数三角形 前置知识:某两个点$(x_{1},,y_{1}),(x_{2},y_{2})\quad (x_{1}<x_{2},y_{1}<y_{2})$所连成 ...

  3. 2023NHOI数三角形题解

    第五题数三角形(e.cpp)[题目描述]已知一个包含n个非负整数的数组a,要从中选出三个数作为三角形的三条边的边长,有多少种不同的选法.注意:要组成三角形需要满足的条件是任意两边之和大于第三边.[输入 ...

  4. BZOJ 3505 [Cqoi2014]数三角形(组合数学)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3505 [题目大意] 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个. 注 ...

  5. bzoj 3505: [Cqoi2014]数三角形

    Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 970  Solved: 595 [Submit][Status][Discuss] Descript ...

  6. 数数字(找规律+模拟)

    数数字 Description 统计一下 aaa ⋯ aaa * b(n 个 a × b) 的结果里面有多少个数字d,a,b,d均为一位数. 样例解释: 3333333333*3=9999999999 ...

  7. 51nod 1770数数字(找规律)

    1770 数数字 基准时间限制:1 秒 空间限制:262144 KB 分值: 20 难度:3级算法题 收藏 关注 统计一下 aaa ⋯ aaa n个a × b 的结果里面有多少个数字d,a,b,d均为 ...

  8. 【BZOJ 3505】 [Cqoi2014]数三角形 容斥原理+排列组合+GCD

    我们先把所有三角形用排列组合算出来,再把一行一列上的三点共线减去,然后我们只观察向右上的三点共线,向左上的乘二即可,我们发现我们如果枚举所有的两边点再乘中间点的个数(GCD),那么我们发现所有的两边点 ...

  9. 洛谷 P3166 [CQOI2014]数三角形(gcd+组合计数)

    题目描述 给定一个 N×MN\times MN×M 的网格,请计算三点都在格点上的三角形共有多少个.注意三角形的三点不能共线. 输入格式 输入一行,包含两个空格分隔的正整数 MMM 和 NNN . 输 ...

最新文章

  1. 将Quartz.NET集成到 Castle中
  2. How do I cover the “no results” text in UISearchDisplayController's searchResultTableView?
  3. BoW模型用于图像检索的一般化流程
  4. coreleft函数
  5. win下python2,3和pip2,3双版本共存
  6. php为首字母的词语,PHP提取中英文词语及数字首字母的简单示例
  7. python读取表格画散点图_python学习笔记-绘制散点图
  8. 微信企业号支付个人php实现
  9. 使用jupyter notebook打开.ipynb文件
  10. 外接显示器,多屏幕显示,出现鼠标移动缓慢,卡顿
  11. java毕业设计都市书城系统Mybatis+系统+数据库+调试部署
  12. BigDecimal加减乘除计算
  13. 齐齐哈尔大学计算机调剂,2020年齐齐哈尔大学硕士研究生调剂复试工作方案
  14. 秒杀抢红包的思考和总结
  15. qtabwidget设置表头_Qt GUI图形图像开发之QT表格控件QTableView,QTableWidget复杂表头(多行表头) 及冻结、固定特定的行的详细方法与实例...
  16. 东南大学2012年招收推荐免试生直接攻读博士学位研究生简章
  17. word2010添加论文引用
  18. html网页设计一个简单的用户登录页面
  19. SpringCloud OpenFeign 整合 logbook 实现链路日志
  20. 一个对中国房地产业忧心忡忡的金融博士生

热门文章

  1. ●BZOJ 1396 识别子串
  2. JS你可能还不知道的一些知识点(一)
  3. 无边框模式对话框,设置鼠标拖动
  4. Android中软键盘弹出时关于布局的问题
  5. 中文版Visual Studio 2008 SP1 智能提示为英文的补丁发布
  6. C#的COM接口定义细则
  7. Android多线程操作——线程池管理综述
  8. 基于css和js的轮播效果图实现
  9. android学习一---搭建开发环境
  10. 转:PHP开发框架流行度排名:Laravel居首