uva 11401
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 n (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的更多相关文章
- uva 11401 Triangle Counting
// uva 11401 Triangle Counting // // 题目大意: // // 求n范围内,任意选三个不同的数,能组成三角形的个数 // // 解题方法: // // 我们设三角巷的 ...
- Uva 11401 数三角形
题目链接:https://uva.onlinejudge.org/external/114/11401.pdf 题意:1~n个数里面挑3个不同的数,组成一个三角形.求方案数. 分析: 令最长的边为X, ...
- 【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 为 ...
- 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. ...
- UVa 11401 三角形的个数
题意:由1,2,3...n组成的序列中找三个数,且以这三个数为变长能组成三角形,求这样的三角形个数. 思路:当每次输入n时重新都计算一遍会TLE...先预处理,将结果存入ans数组. 代码: #inc ...
- Triangle Counting UVA - 11401(递推)
大白书讲的很好.. #include <iostream> #include <cstring> using namespace std; typedef long long ...
- 【递推】【组合计数】UVA - 11401 - Triangle Counting
http://blog.csdn.net/highacm/article/details/8629173 题目大意:计算从1,2,3,...,n中选出3个不同的整数,使得以它们为边长可以构成三角形的个 ...
- UVa 11401 Triangle Counting (计数DP)
题意:给定一个数 n,从1-n这些数中任意挑出3个数,能组成三角形的数目. 析:dp[i] 表示从1-i 个中任意挑出3个数,能组成三角形的数目. 代码如下: #pragma comment(link ...
- UVA计数方法练习[3]
UVA - 11538 Chess Queen 题意:n*m放置两个互相攻击的后的方案数 分开讨论行 列 两条对角线 一个求和式 可以化简后计算 // // main.cpp // uva11538 ...
随机推荐
- 【01背包变形】Robberies HDU 2955
http://acm.hdu.edu.cn/showproblem.php?pid=2955 [题意] 有一个强盗要去几个银行偷盗,他既想多抢点钱,又想尽量不被抓到.已知各个银行 的金钱数和被抓的概率 ...
- POJ 1741 树上 点的 分治
题意就是求树上距离小于等于K的点对有多少个 n2的算法肯定不行,因为1W个点 这就需要分治.可以看09年漆子超的论文 本题用到的是关于点的分治. 一个重要的问题是,为了防止退化,所以每次都要找到树的重 ...
- CF778A:String Game
给出字符串s和t,以及s的长度n的一个全排列,求按照这个排列依次删除s的字符,删到何时s中不含子序列t. 解法一: t中的每个字符的位置在s中跳啊跳,合法的情况下t中的字符在s中的位置应该是单调递增的 ...
- C#.net中当地址有中文时,图片无法显示解决方法
原文发布时间为:2008-11-05 -- 来源于本人的百度文章 [由搬家工具导入] 搞了半天都无法正常显示图片, string path = Server.MapPath("." ...
- input文本框的value属性在页面中不随输入的数据而变化
今天,在做试验遇到这么一个需求: 一个input文本框,输入值后将标签传到后台,在后台解析标签,发现value仍然是初值,不是我们改变后的值. 例如: <input name="&qu ...
- free delete malloc new(——高品质量程序设计指南第16章)
free和delete只是把指针所指向的内存给释放掉了,但是指针本身并没有被删掉. 所以在释放掉内存后一定要记得将指针指向NULL ,动态内存分配不会自动的释放,一定要记得free掉
- Educational Codeforces Round 50 (Rated for Div. 2) E. Covered Points
注释上都有解析了,就不写了吧,去重的问题就用set解决,并且呢第i个线段最多和其他线段产生i-1个交点,n^2logn. #include <cmath> #include <cst ...
- 2017多校Round10(hdu6171~hdu6181)
补题进度:5/11 1001(双向BFS) 题意: 给你一个类似移子游戏,给你初始状态和终止状态,问初始状态到终止状态至少要移多少步,如果步数>20就-1 分析: 很明显的BFS了,不过普通的B ...
- 一个动态链接的问题,dlsym后符号调用主函数的符号报告无法找到
先看看状况(小心头疼) client.c 编译得到 client:在 client 的 main 中用 dlopen( "./liba.so", RTLD_LAZY|RTLD_GL ...
- jmeter的线程组执行顺序不以其出现的顺序发生变化
jmeter可以同时配置多个线程组,那么他们的执行顺序是什么呢?和他们出现的顺序有什么关系呢? 先说下几个特殊的线程组:tearDown线程组和setUp线程组,tearDown线程组一定在最后执行, ...