传送门

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的更多相关文章

  1. UVA11401 Triangle Counting

    题意 输入\(n\),输出有多少种方法可以从\(1,2,3,\dots,n\)中选出3个不同的整数,使得以他们为三边长可以组成三角形. \(n \leq 10^6\) 分析 参照刘汝佳的题解. 按最大 ...

  2. uva11401:Triangle Counting 递推 数学

    uva11401:Triangle Counting 题目读不清楚的下场就是多做两个小时...从1-n中任选3个不重复数字(不重复啊!!坑爹啊!)问能组成三角形的有多少个, 显然1~n能组成的三角形集 ...

  3. uva 11401 Triangle Counting

    // uva 11401 Triangle Counting // // 题目大意: // // 求n范围内,任意选三个不同的数,能组成三角形的个数 // // 解题方法: // // 我们设三角巷的 ...

  4. [Usaco2010 OPen]Triangle Counting 数三角形

    [Usaco2010 OPen]Triangle Counting 数三角形 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 394  Solved: 1 ...

  5. acdream.A Very Easy Triangle Counting Game(数学推导)

    A - A Very Easy Triangle Counting Game Time Limit:1000MS     Memory Limit:64000KB     64bit IO Forma ...

  6. bzoj 1914: [Usaco2010 OPen]Triangle Counting 数三角形 容斥

    1914: [Usaco2010 OPen]Triangle Counting 数三角形 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 272  Sol ...

  7. bzoj1914 [Usaco2010 OPen]Triangle Counting 数三角形 计算机和

    [Usaco2010 OPen]Triangle Counting 数三角形 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 526  Solved: 2 ...

  8. 并发教程--JAVA5中 计数信号量(Counting Semaphore)例子

    并发教程--JAVA5中 计数信号量(COUNTING SEMAPHORE)例子 本文由 TonySpark 翻译自 Javarevisited.转载请参见文章末尾的要求. Java中的计数信息量(C ...

  9. 排序算法六:计数排序(Counting sort)

    前面介绍的几种排序算法,都是基于不同位置的元素比较,算法平均时间复杂度理论最好值是θ(nlgn). 今天介绍一种新的排序算法,计数排序(Counting sort),计数排序是一个非基于比较的线性时间 ...

  10. 【算法】计数排序(Counting Sort)(八)

    计数排序(Counting Sort) 计数排序不是基于比较的排序算法,其核心在于将输入的数据值转化为键存储在额外开辟的数组空间中. 作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范 ...

随机推荐

  1. Fiddler使用总结(一)

    Fiddler基础知识 .Fiddler是强大的抓包工具,它的原理是以web代理服务器的形式进行工作的,使用的代理地址是:127.0.0.1,端口默认为8888,我们也可以通过设置进行修改. .代理就 ...

  2. java 实现redis缓存

    由于项目加载时请求数据量过大,造成页面加载很慢.采用redis作缓存,使二次访问时页面,直接取redis缓存. 1.redis连接参数 2.连接redis,设置库 3.配置文件开启缓存 4.mappe ...

  3. Python基础 之 list类-列表

    list类-列表 一.list类的基本属性 1. 列表格式 li = [1, 12, 9, ", 10], "even"], "root", True ...

  4. 【转载】android 常用开源框架

    对于Android初学者以及对于我们菜鸟,这些大神们开发的轻量级框架非常有用(更别说开源的了). 下面转载这10个框架的介绍:(按顺序来吧没有什么排名). 一.  Afinal 官方介绍: Afina ...

  5. leetcode个人题解——#19 Remove Nth Node From End of List

    思路:设置两个指针,其中第二个指针比第一个延迟n个元素,这样,当第二个指针遍历到指针尾部时,对第一个指针进行删除操作. 当然,这题要注意一些边界值,比如输入[1,2] n=2时如果按照思路走会指向未分 ...

  6. Thunder团队Beta周贡献分规则

    小组名称:Thunder 项目名称:i阅app 组长:王航 成员:李传康.翟宇豪.邹双黛.苗威.宋雨.胡佑蓉.杨梓瑞 分配规则 规则1:基础分,拿出总分的20%(8分)进行均分,剩下的80%(32分) ...

  7. Thunder团队第三周 - Scrum会议3

    Scrum会议3 小组名称:Thunder 项目名称:i阅app Scrum Master:代秋彤 工作照片: 参会成员: 王航:http://www.cnblogs.com/wangh013/ 李传 ...

  8. RabbitMQ基本模式

    最近用到了一些RabbitMQ的东西,看了官方的Get Started,以此为模板总结一下. (1)生产者(发送方)发送消息到ExChange(含参:routingkey),ExChange通过bin ...

  9. iOS-获取webView的高度

    - (void)webViewDidFinishLoad:(UIWebView *)wb{ //方法1 CGFloat documentWidth = [[wb stringByEvaluatingJ ...

  10. phpcms免登录cookies设置方案

    PHPCMS的SESSION时间长一些的解决办法修改两个文件: phpsso_server/caches/configs/system.php里的 'session_ttl' => 999999 ...