牛客周赛119E题(数论+二分函数) 题目链接E-小苯的三角计数_牛客周赛 Round 119题目大意有n 种木棍其中第 i 种木棍的长度为 a[i]有 b[i]根他希望从中取出三根不同的木棍组成三角形请问他可以组成多少种本质不同的非退化三角形。【非退化三角形】即满足任意两边长之和大于第三边。【本质不同】我们认为两个三角形本质不同当且仅当它们不是全等的。题目思路对于这道题来说我们可以这样思考对于每种长度的木棍的根数考虑情况应该是cntmin(3,b[i]),因为一个非退化三角形最多只能使用3根接下来我们对于某种长度的木棍的根数进行考虑如果是b[i]3,那么当使用3根木棍时那么它就是一个等边三角形ans如果使用2根木棍时等腰三角形那么我们已知两条边找第三条边也就是a[i]a[j]a[k](a[i]a[j])-2*a[i]-1a[k],用人话说就是a[k]小于一个固定的值那么我们对a数组排序后进行二分查找该值即可具体的我们通过枚举每个a[i],对于每个a[i]用lower_bound函数查找a[k],但是最终ans需要减1因为小于等于2*a[i]-1的数中必然有a[i]该值如果计入答案就相同于上面那种情况了如果使用1根木棍也就是一般三角形我们就要枚举a[i],a[j]两种长度不同其中a[i]a[j])的木棍了由于n的范围只有2000那么O(n*n)是允许的然后策略和上面是一样的但这里最终ans不需减1因为当a[i]a[j]a[k]时它等价于一个更简单的必然判断较短的两边之和必须大于最长的那条边。也就是说a[k]a[j]a[i],所以最后ans-j;b[i]为2或1时以此类推即可代码如下#include bits/stdc.h using namespace std; using i128 __int128; #define int long long #define endl \n void solve() { int n; cin n; vectorpairint, int v(n1); int ans 0; for (int i 1; i n; i) { int a, b; cin a b; v[i] {a, b}; if (b 3) { // 等边三角形 ans; } //cout ans endl; } sort(v.begin()1, v.end()); for (int i 1; i n; i) { // 等腰三角形 pairint, int p v[i]; int x1 p.first; int x2 p.second; if (x2 2)//2*a[i]a[k] { pairint, int t {x1 * 2, -1}; int pos lower_bound(v.begin()1, v.end(), t) - v.begin()-1; if(pos0){ continue; } ans pos - 1; } //cout ans endl; } for (int i 1; i n; i) { // 一般三角形 for (int j i 1; j n; j) { pairint, int p1 v[i]; pairint, int p2 v[j]; int x1 p1.first; int x2 p2.first; pairint, int t {x1 x2 , -1}; int pos lower_bound(v.begin()1, v.end(), t) - v.begin()-1; pos max(0LL, pos-j); ans pos; } } cout ans endl; } signed main() { ios::sync_with_stdio(false); cin.tie(nullptr); int T; cin T; while (T--) { solve(); } return 0; }

相关新闻

最新新闻

Java IDEA - 各种快捷键设置汇总(提高工具使用效率)

Java IDEA - 各种快捷键设置汇总(提高工具使用效率)

目录 (速查快捷键,点击标题则跳转到对应快捷键的设置)(不断更新中,需要的可以收藏) 一、序列化Serializable设置 (光标放在类上 -> alt enter即可) 二、回退/前进 到上一个查看的类 /…

2026/8/27 8:47:57
数学建模聚类算法实战:从K-Means到DBSCAN的思维转换与应用

数学建模聚类算法实战:从K-Means到DBSCAN的思维转换与应用

1. 从“分类”到“聚类”:数学建模中一个根本性的思维转换 如果你参加过数学建模比赛,或者正在准备,大概率听过“聚类算法”这个词。很多新手拿到一个涉及数据分组的题目,第一反应是去找“标准答案”——比如,题目里给…

2026/8/27 8:47:57
Codex实战指南:从环境配置到开发工作流落地

Codex实战指南:从环境配置到开发工作流落地

我第一次打开 Codex 时,心里想的还是“聊天窗口里写代码”那套老经验。后来发现,Codex 的工作方式完全是另一个路径:它不只是给出代码建议,而是会自己读文件、跑命令、看报错、然后继续改。这个区别,决定了你接下来的所…

2026/8/27 8:47:57
ContextMenuMgr Plus:Windows右键菜单清理与防护实战

ContextMenuMgr Plus:Windows右键菜单清理与防护实战

这次我们来看一个 GitHub 上关注度比较高的开源 Windows 工具:ContextMenuMgr Plus。它的定位很直接:管理 Windows 右键菜单。很多人电脑用久了之后,右键菜单会变得特别长,打开文件资源管理器都变卡,还时不时冒出来一些…

2026/8/27 8:47:57
labelImg免安装实战:YOLO与VOC格式标注零报错指南

labelImg免安装实战:YOLO与VOC格式标注零报错指南

简介:labelImg是目标检测数据标注的核心工具,其本质是将图像中的目标区域转化为结构化坐标数据。原理上依赖Python解释器、PyQt5 GUI库及预定义的XML/TXT序列化逻辑,技术价值在于打通从原始图像到训练可用标签的工程闭环。典型应用场景包括车…

2026/8/27 8:47:57
从AI代理玩具到工程实践:构建可靠可控的Harness Engineering环境

从AI代理玩具到工程实践:构建可靠可控的Harness Engineering环境

简介:在AI代理技术领域,从简单的Demo验证到复杂的工程化落地,面临着可靠性、可控性和安全性的核心挑战。其原理在于通过系统化的工程方法,为AI代理构建一个具备确定性和可重复性的执行环境,从而确保其在复杂任务中的稳…

2026/8/27 8:42:57