Triangle Counting

Input: Standard Input

Output: Standard Output

You are given n rods of length 1, 2…, n. You have to pick any 3 of them & build a triangle. How many distinct triangles can you make? Note that, two triangles will be considered different if they have at least 1 pair of arms with different length.

Input

The input for each case will have only a single positive integer (3<=n<=1000000). The end of input will be indicated by a case with n<3. This case should not be processed.

Output

 

For each test case, print the number of distinct triangles you can make.

Sample Input                                                  Output for Sample Input

5

8

0

3

22

题目描述:

有多少种方法可以从1,2,3,,,,n中选出三个不同的整数,可以组成三角形。

1 数学分析:

设最大边长为x的三角形与c[x]个。

y+z>x;

x-y<z<x;

枚举y的长度,就可以得到z的个数。

y==1,z无解;

y==2,z=x-1;

y==3,z=x-1 ,x-2;

......

y=x-1,z=2,3,4,,,x-1;

等差数列求和.(x-1)*(x-2)/2;

去除y==z,和重复计算的种类.

y==z有多少种呢?

y的取值从x/2+1开始到x-1为止,因为这样也能组成三角形。

c[x]=( (x-1)(x-2)/2-(x-1)/2 ) 、2;

f[x]=f[x-1]+c[x];

2  直接观察:

n为偶数时:

2 n-1 (1)

3 n-2  (2)

4 n-3

......

m  m+1 (n-m-1)

m+1 m+2 (n-m-2)

.....

n-2 n-1   1

f[i]=f[i-1]+(i*i-4*i+4)/4;利用等差数列求和

n为奇数时:

2 n-1 (1)

3 n-2  (2)

4 n-3

......

m  m+2 (n-m-2)

m+1 m+2 (n-m-2)

.....

n-2 n-1   1

f[i]=f[i-1]+(i-i/2-1) * (i-3) /2;

#include<stdio.h>
typedef long long i64;
long long f[1000000];
void solve()
{ f[3]=0;
for(long long i=4;i<=1000000;i++)
{
f[i]=0;
if( (i & 1)==0 ) //i为偶数
f[i]=f[i-1]+(i*i-4*i+4)/4;
else
f[i]=f[i-1]+(i-i/2-1) * (i-3) /2;
} }
int main()
{
solve();
int n;
while(scanf("%lld",&n)!=EOF&&n>=3)
{
printf("%lld\n",f[n]);
}
return 0;
}

  

/*
设最大边长为x的三角形有c(x)个,跟三角形的定义两边之和大于第三边有x<y+z
变形下的x-y<z<x;当y=1时无解,当y=2时只有一个解z=x-1,知道y=x-1时又x-2个解
,所以共有(x-1)(x-2)/2个解,由于题意中不能存在y=z的解所以y=z这部分解,
当x/2+1至x-1才存在y=z的可能,共有(x-1)/2个.还过有过程中每种三角形算了两遍
所以c(x)=((x-1)(x-2)/2-(x-1)/2)/2);
f(n)=c(1)+c(2)+.....+c(n);
*/
#include<iostream>
#include<cstdio>
using namespace std;
__int64 f[]; void Init()
{
__int64 i;//用int定义结果Wrong answer,不定义__int64计算过程中会溢出
f[]=;
f[]=;
f[]=;
for(i=;i<=;i++)
f[i]=f[i-]+((i-)*(i-)/-(i-)/)/;
} int main()
{
Init();
int n;
while(cin>>n,n>=)
printf("%I64d\n",f[n]);
return ;
}

uva 11401的更多相关文章

  1. uva 11401 Triangle Counting

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

  2. Uva 11401 数三角形

    题目链接:https://uva.onlinejudge.org/external/114/11401.pdf 题意:1~n个数里面挑3个不同的数,组成一个三角形.求方案数. 分析: 令最长的边为X, ...

  3. 【UVA 11401】Triangle Counting

    题 题意 求1到n长度的n根棍子(3≤n≤1000000)能组成多少不同三角形. 分析 我看大家的递推公式都是 a[i]=a[i-1]+ ((i-1)*(i-2)/2-(i-1)/2)/2; 以i 为 ...

  4. UVA 11401 - Triangle CountingTriangle Counting 数学

    You are given n rods of length 1,2, . . . , n. You have to pick any 3 of them and build a triangle. ...

  5. UVa 11401 三角形的个数

    题意:由1,2,3...n组成的序列中找三个数,且以这三个数为变长能组成三角形,求这样的三角形个数. 思路:当每次输入n时重新都计算一遍会TLE...先预处理,将结果存入ans数组. 代码: #inc ...

  6. Triangle Counting UVA - 11401(递推)

    大白书讲的很好.. #include <iostream> #include <cstring> using namespace std; typedef long long ...

  7. 【递推】【组合计数】UVA - 11401 - Triangle Counting

    http://blog.csdn.net/highacm/article/details/8629173 题目大意:计算从1,2,3,...,n中选出3个不同的整数,使得以它们为边长可以构成三角形的个 ...

  8. UVa 11401 Triangle Counting (计数DP)

    题意:给定一个数 n,从1-n这些数中任意挑出3个数,能组成三角形的数目. 析:dp[i] 表示从1-i 个中任意挑出3个数,能组成三角形的数目. 代码如下: #pragma comment(link ...

  9. UVA计数方法练习[3]

    UVA - 11538 Chess Queen 题意:n*m放置两个互相攻击的后的方案数 分开讨论行 列 两条对角线 一个求和式 可以化简后计算 // // main.cpp // uva11538 ...

随机推荐

  1. BZOJ3027 - [CEOI2004]Sweet

    Portal Description 给出\(n(n\leq10),a,b(a,b\leq10^7)\)与\(\{c_n\}(c_i\leq10^6)\),求使得\(\sum_{i=1}^n x_i ...

  2. centos 6.5 yum安装lnmp

    转自:http://blog.csdn.net/lane_l/article/details/20235909 准备篇: 端口 vi /etc/sysconfig/iptables -A INPUT ...

  3. Codeforces917C. Pollywog

    $n \leq 1e8$个石头,$x \leq 8$个蝌蚪一开始在最左边$x$个石子,要跳到最右的$x$个,每次只能最左边的蝌蚪跳一次,一个石头不能站两个蝌蚪,跳可以跳$1到k,x \leq k \l ...

  4. 2017"百度之星"程序设计大赛 - 初赛(B)度度熊的交易计划

    n个村庄m条带权路,权值为花费,村庄可以造东西卖东西,造完东西可以换地方卖,给出每个村庄造东西花费a和最多个数b.卖东西价值c和最多个数d,求最大收益. 裸的费用流.然而还WA了一发.很好. 建源向每 ...

  5. PHP错误处理函数set_error_handler()的用法[转载]

    定义和用法 set_error_handler() 函数设置用户自定义的错误处理函数. 该函数用于创建运行时期间的用户自己的错误处理方法. 该函数会返回旧的错误处理程序,若失败,则返回 null. 语 ...

  6. Markdown编辑器及语法

    dillinger 漂亮强大,支持md, html, pdf 文件导出.支持dropbox, onedrive,google drive, github. 来自国外,可能不够稳定. MaHua 小众软 ...

  7. 使用Guava适配不同的callback

    Cache<Key,Value> cache =CacheBuilder.newBuilder() .maximumSize(1000) .build();// look Ma, no C ...

  8. nexus3.1私服搭建

    原文:http://blog.csdn.net/qqqqq210/article/details/52993337 1.简介 近期公司需要搭建jenkins自动化构建部署,需要搭建nexus私服环境, ...

  9. 搜索引擎keyword智能提示的一种实现

    问题背景 搜索关键字智能提示是一个搜索应用的标配.主要作用是避免用户输入错误的搜索词,并将用户引导到相应的关键词上,以提升用户搜索体验. 美团CRM系统中存在数以百万计的商家,为了让用户高速查找到目标 ...

  10. HDU3926Hand in Hand(搜索 或 并查集)

    Problem Description In order to get rid of Conan, Kaitou KID disguises himself as a teacher in the k ...