【计数】【UVA11401】 Triangle Counting
Description
把1……n这n个数中任取3个数,求能组成一个三角形的方案个数
Input
多组数据,对于每组数据,包括:
- 一行一个数i,代表前i个数。
输入结束标识为i<3.
Output
对于每组数据,输出:
- 对应的方案个数
Sample Input
Sample Output
Hint
n≤1e6。
三个数字x,y,z能组成三角形当且仅当对于任意顺序,都满足x+y>z。
Solution
考虑把所有能组成的三角形按照最长边分类。因为三边长度互不相同,所以每个三角形都会被唯一的归为一类。设fi为最长边为i的方案个数,那么按照加法原理,n以内的方案个数=∑(i :3 to n)fi。考虑三角形三边关系定理,对于三遍x,y,z,不妨设x是最长边,那么满足y+z>x,移项得z>x-y。又因为x是最长边,故有x-y<z<x。
考虑乘法原理,先确定y,当y=1时,无解;y=2时,有1个解。进行数学归纳易证y=x-1时,有x-2个解。根据等差数列的求和公式,解的个数为∑x-1i=1=(x-1)(x-2)/2。但是需要注意的是这样包括了y=z的情况。需要减掉。另外这样每个三角形被计算了两遍,需要除以二。
对于y=z的情况被统计到,当且仅当y<x/2。所以需要减掉(x-1)/2。最后递推解决前n个的问题即可。
需要注意的是开longlong
Code
#include<cstdio>
#define rg register
#define ci const int typedef long long int ll; namespace IO {
char buf[];
} inline void qr(int &x) {
char ch=getchar(),lst=' ';
while(ch>''||ch<'') lst=ch,ch=getchar();
while(ch>=''&&ch<='') x=(x<<)+(x<<)+(ch^),ch=getchar();
if(lst=='-') x=-x;
} inline void write(ll x,const char aft,const bool pt) {
if(x<) {putchar('-');x=-x;}
int top=;
do {
IO::buf[++top]=x%+;
x/=;
} while(x);
while(top) putchar(IO::buf[top--]);
if(pt) putchar(aft);
} template <typename T>
inline T mmax(const T &a,const T &b) {if(a>b) return a;return b;}
template <typename T>
inline T mmin(const T &a,const T &b) {if(a<b) return a;return b;}
template <typename T>
inline T mabs(const T &a) {if(a>=) return a;return -a;} template <typename T>
inline void mswap(T &a,T &b) {T temp=a;a=b;b=temp;} const int maxn = ; ll frog[maxn];
int a; int main() {
for(rg int i=;i<maxn;++i) {
frog[i]=frog[i-]+(((1ll*(i-)*(i-)>>)-((i-)>>))>>);
}
a=;qr(a);
while(a>=) {
write(frog[a],'\n',true);
a=;qr(a);
}
return ;
}
Summary
在统计时,及时去重是必要的。
在lg的题解上有神仙找规律……反正我没法证明
设fi为i个的ans,则fi=fi-2+i-3
【计数】【UVA11401】 Triangle Counting的更多相关文章
- UVA11401 Triangle Counting
题意 输入\(n\),输出有多少种方法可以从\(1,2,3,\dots,n\)中选出3个不同的整数,使得以他们为三边长可以组成三角形. \(n \leq 10^6\) 分析 参照刘汝佳的题解. 按最大 ...
- uva11401:Triangle Counting 递推 数学
uva11401:Triangle Counting 题目读不清楚的下场就是多做两个小时...从1-n中任选3个不重复数字(不重复啊!!坑爹啊!)问能组成三角形的有多少个, 显然1~n能组成的三角形集 ...
- uva 11401 Triangle Counting
// uva 11401 Triangle Counting // // 题目大意: // // 求n范围内,任意选三个不同的数,能组成三角形的个数 // // 解题方法: // // 我们设三角巷的 ...
- [Usaco2010 OPen]Triangle Counting 数三角形
[Usaco2010 OPen]Triangle Counting 数三角形 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 394 Solved: 1 ...
- acdream.A Very Easy Triangle Counting Game(数学推导)
A - A Very Easy Triangle Counting Game Time Limit:1000MS Memory Limit:64000KB 64bit IO Forma ...
- bzoj 1914: [Usaco2010 OPen]Triangle Counting 数三角形 容斥
1914: [Usaco2010 OPen]Triangle Counting 数三角形 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 272 Sol ...
- bzoj1914 [Usaco2010 OPen]Triangle Counting 数三角形 计算机和
[Usaco2010 OPen]Triangle Counting 数三角形 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 526 Solved: 2 ...
- 并发教程--JAVA5中 计数信号量(Counting Semaphore)例子
并发教程--JAVA5中 计数信号量(COUNTING SEMAPHORE)例子 本文由 TonySpark 翻译自 Javarevisited.转载请参见文章末尾的要求. Java中的计数信息量(C ...
- 排序算法六:计数排序(Counting sort)
前面介绍的几种排序算法,都是基于不同位置的元素比较,算法平均时间复杂度理论最好值是θ(nlgn). 今天介绍一种新的排序算法,计数排序(Counting sort),计数排序是一个非基于比较的线性时间 ...
- 【算法】计数排序(Counting Sort)(八)
计数排序(Counting Sort) 计数排序不是基于比较的排序算法,其核心在于将输入的数据值转化为键存储在额外开辟的数组空间中. 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范 ...
随机推荐
- XSS--PHPwind5.3复现
xss再分析 短payload <svg/onload=alert(1)> <body/onfocus=alert``> <body/onfocus=confirm``& ...
- 负数取余/整除,Python和C语言的不同
总结一句:Python中负数整除,是向负无穷取整,所以导致负数取余不对 在数学公式中,两种语言的表示算法都是一样的,都是: r=a-n*[a/n] 以上,r是余数,a是被除数,n是除数. 唯一不同点, ...
- 【SpringCloud】第七篇: 高可用的分布式配置中心(Spring Cloud Config)
前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选. ...
- 【转】MMO即时战斗:地图角色同步管理和防作弊实现
---转自CSDN 一.前言 无论是端游.页游.手游如果是采用了MMO即时战斗游戏模式,基本都会遇到同屏多角色实时移动.释放技能.战斗等场景,于是自然也需要实现如何管理同屏内各种角色的信息同步:例如角 ...
- 【shell 练习2】产生随机数的方法总结
一.产生随机数 ()RANDOM 产生随机数 [root@localhost ~]# echo $RANDOM [root@localhost ~]# )) #想要生成八个随机数,随便加一个八位的数字 ...
- CryptoZombies学习笔记——Lesson4
第四课主要介绍payable函数相关. chapter1: payable修饰函数 以太坊允许同时调用函数和eth转账.msg.value显示发送到合约的以太币数,ether是内置整型数.如果函数没有 ...
- POJ 1741 Tree(树的分治)
Description Give a tree with n vertices,each edge has a length(positive integer less than 1001). Def ...
- 软工2017第五周——个人PSP
10.13 --10.19本周例行报告 1.PSP(personal software process )个人软件过程. 类型 任务 预计时间 开始时间 结束时间 中断时 ...
- autoCAD 2008 Win7 64位, win8 64位 安装 燕秀工具箱 yanxiu.cui 文件下载
Win7 64位, win8 64位 安装 燕秀工具箱 , 提示没有权限. 网站上下载燕秀工具箱, 安装后. 提示权限不够. 解决办法如下; 1. CAD, 权限修改. 2. 下载 yanxiu.cu ...
- MFC消息处理
1.MFC窗口如何与AfxWndProc建立联系. 当一个新的CWnd派生类创建时,在调用CWnd::CreateEx()过程中,MFC都会安装AfxCbtFilterHook().这个Hook将拦截 ...