[CQOI2014]数三角形 题解(找规律乱搞)
题面
其实这道题不用组合数!不用容斥!
只需要一个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]数三角形 题解(找规律乱搞)相关推荐
- P3166 [CQOI2014]数三角形(组合数学)
P3166 [CQOI2014]数三角形(组合数学) 整点三角形个数. 正难则反,求出总方案和共线三角形方案数即可. 总方案:C((n+1)(m+1),3)C((n+1)(m+1),3)C((n+1) ...
- bzoj3505 / P3166 [CQOI2014]数三角形
P3166 [CQOI2014]数三角形 前置知识:某两个点$(x_{1},,y_{1}),(x_{2},y_{2})\quad (x_{1}<x_{2},y_{1}<y_{2})$所连成 ...
- 2023NHOI数三角形题解
第五题数三角形(e.cpp)[题目描述]已知一个包含n个非负整数的数组a,要从中选出三个数作为三角形的三条边的边长,有多少种不同的选法.注意:要组成三角形需要满足的条件是任意两边之和大于第三边.[输入 ...
- BZOJ 3505 [Cqoi2014]数三角形(组合数学)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=3505 [题目大意] 给定一个nxm的网格,请计算三点都在格点上的三角形共有多少个. 注 ...
- bzoj 3505: [Cqoi2014]数三角形
Time Limit: 10 Sec Memory Limit: 128 MB Submit: 970 Solved: 595 [Submit][Status][Discuss] Descript ...
- 数数字(找规律+模拟)
数数字 Description 统计一下 aaa ⋯ aaa * b(n 个 a × b) 的结果里面有多少个数字d,a,b,d均为一位数. 样例解释: 3333333333*3=9999999999 ...
- 51nod 1770数数字(找规律)
1770 数数字 基准时间限制:1 秒 空间限制:262144 KB 分值: 20 难度:3级算法题 收藏 关注 统计一下 aaa ⋯ aaa n个a × b 的结果里面有多少个数字d,a,b,d均为 ...
- 【BZOJ 3505】 [Cqoi2014]数三角形 容斥原理+排列组合+GCD
我们先把所有三角形用排列组合算出来,再把一行一列上的三点共线减去,然后我们只观察向右上的三点共线,向左上的乘二即可,我们发现我们如果枚举所有的两边点再乘中间点的个数(GCD),那么我们发现所有的两边点 ...
- 洛谷 P3166 [CQOI2014]数三角形(gcd+组合计数)
题目描述 给定一个 N×MN\times MN×M 的网格,请计算三点都在格点上的三角形共有多少个.注意三角形的三点不能共线. 输入格式 输入一行,包含两个空格分隔的正整数 MMM 和 NNN . 输 ...
最新文章
- 将Quartz.NET集成到 Castle中
- How do I cover the “no results” text in UISearchDisplayController's searchResultTableView?
- BoW模型用于图像检索的一般化流程
- coreleft函数
- win下python2,3和pip2,3双版本共存
- php为首字母的词语,PHP提取中英文词语及数字首字母的简单示例
- python读取表格画散点图_python学习笔记-绘制散点图
- 微信企业号支付个人php实现
- 使用jupyter notebook打开.ipynb文件
- 外接显示器,多屏幕显示,出现鼠标移动缓慢,卡顿
- java毕业设计都市书城系统Mybatis+系统+数据库+调试部署
- BigDecimal加减乘除计算
- 齐齐哈尔大学计算机调剂,2020年齐齐哈尔大学硕士研究生调剂复试工作方案
- 秒杀抢红包的思考和总结
- qtabwidget设置表头_Qt GUI图形图像开发之QT表格控件QTableView,QTableWidget复杂表头(多行表头) 及冻结、固定特定的行的详细方法与实例...
- 东南大学2012年招收推荐免试生直接攻读博士学位研究生简章
- word2010添加论文引用
- html网页设计一个简单的用户登录页面
- SpringCloud OpenFeign 整合 logbook 实现链路日志
- 一个对中国房地产业忧心忡忡的金融博士生