UVa 11401 三角形的个数

题意:由1,2,3...n组成的序列中找三个数,且以这三个数为变长能组成三角形,求这样的三角形个数。

思路:当每次输入n时重新都计算一遍会TLE。。。先预处理,将结果存入ans数组。

代码:

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<queue>
#include<algorithm>
#include<cmath>
#include<map>
using namespace std;
#define INF 0x7fffffff
long long ans[1000100];
int main(){
	long long i,n,temp,k;
	ans[3] = 0;
	for(i=4;i<=1000000;i++){
		n = i;
		temp = 0;
		if(i%2==0){
			temp = (n*(n-2)/4)/2;
			temp += (n-2)*(n-4)/8;
		}
		else{
			temp = ((n-1)*(n-3)/4)/2;
			temp += (n-1)*(n-3)/8;
		}
		ans[i] = temp + ans[i-1];
	}
	while(scanf("%lld",&n) == 1 && n >= 3)
	    printf("%lld\n",ans[n]);
	return 0;
}
posted @ 2015-09-18 23:29  阿文的博客  阅读(161)  评论(0编辑  收藏  举报