[找规律] 三角形个数(牛客+找规律+思维+代码优化)
题目描述
链接:牛客网 三角形个数
分析与代码
非常好的一道题目,我一直认为找规律、分类的题是相当重要的,这也能变向提高你的问题分析能力,思维能力,状态划分能力。本题是相当不错的题目,在小学奥数中经常让来计数。大学中就让直接求规律了啊哈哈~
分类
首先,得想到用 增量 的方式来考虑该问题。边场为 n
的三角形就比边长为 n - 1
的三角形多了最底边上构成的三角形,我们只需要统计这些 增量 三角形的个数即可。
将整个图形分为正三角形和倒三角形,来分别考虑其规律,我就在这贴官方的本次比赛的题解了:
这个分类的思想就很重要,就能将问题不重不漏的进行简化!
但是我觉得官方给的这个 Java
代码不太容易使人理解…下面我自己写了份,加了备注。
第一版代码,计算每一层的三角形增量的个数
#include <iostream>using namespace std;typedef long long LL;const int N = 20210420, MOD = 1e9+7;LL a[N], b[N], c[N];int main() {int n = 20210411;for (LL i = 2; i <= n; i ++ ) {if (i & 1) b[i] += (b[i - 2] + (i - 1)) % MOD; // 奇数,b[i] 为第i层,且i为奇数的增量倒三角形else c[i] += (c[i - 2] + (i - 1)) % MOD; // 偶数,同理}for (LL i = 1; i <= n; i ++ ) {// 它的增量是 (i * (i + 1)) / 2,再顺手算一个前缀和a[i] += a[i - 1] + (i * (i + 1)) / 2 % MOD; // a[i] 是第1~i层的所有正三角形个数if (i & 1) a[i] += b[i]; // 这样写就很好理解了,奇数层加奇数层的倒三角else a[i] += c[i];a[i] %= MOD;}cout << a[n] << endl;return 0;
}
第二版代码,直接计算前 i
层的正三角形个数、倒三角形的个数:
#include <iostream>using namespace std;typedef long long LL;const LL N = 20210420, MOD = 1e9+7;LL a[N], b[N], c[N];int main() {int n = 20210411;// 每一层的正三角形个数for (LL i = 1; i <= n; i ++ ) a[i] += (a[i - 1] + (i * (i + 1) / 2)) % MOD;// 每一层新增的倒三角形个数for (LL i = 2; i <= n; i ++ ) {if (i & 1) b[i] += (b[i - 2] + (i - 1)) % MOD; // 奇数else c[i] += (c[i - 2] + (i - 1)) % MOD; // 偶数}for (LL i = 1; i <= n; i ++ ) b[i] = (b[i] + b[i - 1]) % MOD, c[i] = (c[i] + c[i - 1]) % MOD;cout << (a[n] + b[n] + c[n]) % MOD << endl;return 0;
}
第三版代码,在做题过程中,关于倒三角的增量公式确实是 (n-1)+(n-3)+(n-5)+...
其实完全可以用等差数列求和来得到这个增量值。
可以分两种情况:
n
为奇数的情况的时候,尾项必然是 0。n
为偶数的情况的时候,尾项必然是 1。- 故,只需要计算得到项数即可使用等差数列求和公式 n(a1+an)2\frac {n(a_1+a_n)} 22n(a1+an)。
- 假设项数为 kkk ,此时 d=−2d=-2d=−2,即有 (n−1)−2(k−1)≥0(n-1)-2(k-1) \geq 0(n−1)−2(k−1)≥0 简单分类讨论就能得到不论奇数还是偶数的情况项数都能统一到 (i−1)2\frac {(i-1)} 22(i−1) 。这就很 妙 了。代码将极大的简化~哈哈哈
#include <iostream>using namespace std;typedef long long LL;const LL N = 20210420, MOD = 1e9+7;LL a[N], b[N];int main() {LL n = 20210411;// 前i层的正三角形个数for (LL i = 1; i <= n; i ++ ) a[i] += (a[i - 1] + (i * (i + 1) / 2)) % MOD;// 不分奇偶,直接运用等差数列求和公式计算,b[i]为前i层的倒三角个数 for (LL i = 1; i <= n; i ++ ) {if (i & 1) b[i] = ((i + 1) / 2) * (0 + i - 1) / 2 % MOD;else b[i] = ((i + 1) / 2) * (1 + i - 1) / 2 % MOD;b[i] =(b[i] + b[i - 1]) % MOD;}cout << (a[n] + b[n]) % MOD << endl;return 0;
}
[找规律] 三角形个数(牛客+找规律+思维+代码优化)相关推荐
- 1090 Highest Price in Supply Chain (25 分)(模拟建树,找树的深度)牛客网过,pat没过...
A supply chain is a network of retailers(零售商), distributors(经销商), and suppliers(供应商)-- everyone invo ...
- 牛客 - 建通道(思维)
题目链接:点击查看 题目大意:给出每个点的权值为v[ i ],现在要求将 n 个点互相连通,以保证代价最小,点 i 和点 j 连接的代价为 lowbit( v[ i ] ^ v[ j ]) 题目分析: ...
- (牛客腾讯思维编程题)编码编码分组打印下标题目分析
本题答案在这点击进入 假定一种编码的编码范围是a ~ y的25个字母,从1位到4位的编码,如果我们把该编码按字典序排序,形成一个数组如下: a, aa, aaa,aaaa, aaab, aaac, - ...
- 牛客 - 树上博弈(思维)
题目链接:点击查看 题目大意:给出一棵树,现在有两个人在玩一个游戏,两人依次在树上行走,只能走没有人的结点,无法行走的人失败,题目需要我们求出有多少个初始点对,对于先手而言是必胜的情况 题目分析:其实 ...
- 牛客 - 捡金币(思维+二维前缀和+构造)
题目链接:点击查看 题目大意:给出一个n*m的矩阵,每个方格都有一个权值,现在给出q次询问,每次询问的格式是x,y,k,问与点(x,y)的曼哈顿距离不超过k的方格内的所有权值之和 题目分析:首先这个题 ...
- 牛客 - 双流机场(思维)
题目链接:点击查看 题目大意:给出一个n*m的有向图,每一行和每一列的方向都是相同的,现在给出每一行和每一列的方向,问给出的图是不是一个强联通图 题目分析:这个题目之前做过数据很小的版本,当时那个题目 ...
- 牛客网(Java)——三角形
三角形__牛客网 (nowcoder.com)https://www.nowcoder.com/questionTerminal/c67a09062c0f4a5b964eef0945d3dd06题目要 ...
- 牛客竞赛每日俩题 - 动态规划1
目录 DP入门(存储之前状态以简化) DP解决最短路问题 DP入门(存储之前状态以简化) 拆分词句_牛客题霸_牛客网 思路: 方法:动态规划 状态: 子状态:前1 , 2 , 3 , ...
- 洛谷or牛客数据结构+算法
栈思想:先进后出 tips:栈里能放下标就放下标 (牛客)小c的计事本(直接用stack可以简化代码,且不会被自己绕晕,当时没意识到) (牛客)吐泡泡(没意识到用栈),(牛客)好串 1.后缀表达式(栈 ...
- 牛客小白月赛 G 异或 找规律
链接:https://www.nowcoder.com/acm/contest/135/G 来源:牛客网 题目描述 从前,Apojacsleam家的水族箱里,养了一群热带鱼. 在这几条热带鱼里,Apo ...
最新文章
- CSRF 攻击的应对之道--转
- matlab偶极矩电场强度分布图_1.2.10 电介质在外电场下的极化、电极化强度、电极化率...
- 如何用python实现自动化_如何使用Python实现自动化水军评论
- 国家开放大学2021春1087数学分析专题研究题目
- sqlserver垮库查询_Oracle和SQLServer中实现跨库查询
- exists的用法 python_Python 办公自动化自动整理文件,一键完成!
- 【OO学习】OO第二单元作业总结
- 2021年陕西高考成绩单招查询时间,2021年陕西高考录取结果什么时候出来,查询时间一览表...
- oracle中lag()函数和lead()函数的用法(图文)
- 网工必考的8个dos命令
- pandas读取excel带汉字的列头_Pandas读取excel与中文文件名
- origin柱状图坐标标签_origin菜鸟求助。如何做横坐标连续(如下图)的柱状图?...
- Python模拟用户自动登陆网易126邮箱
- python解决经典数学问题-用python解决普通高中数学书A必修三题目(一)
- 银行春招:六大行薪资待遇知多少?(下)
- 程序员等级图鉴,大牛头发有点少
- mt4 虚拟服务器 配置,mt4云服务器配置
- 前端项目中如何去除已经不再使用的图片资源
- 紧跟百度爱采购:搜狗上线b2b商城“搜狗招商”
- 计算机cpu和主板最新发展情况,计算机cpu和主板怎么搭配