UVA 11401
https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2396
溶液:1からnまでのこれらの数を構成することができる三角形の数を求めます。
Y <Z <x - yの2つの数値を見つけ、Z規定される三角形を満足することの前に、数がXであることを今仮定し、xは存在します。
yが1、Z満足しないXの数=とき - 1 <Z <Xは、三角形の数が0 NUMです。
Y = 2のとき、Zは1を満たしているX - 2 <Z <X、NUM = 1。
Y = 3、NUM = 2。
......
Y = X - 1、N = X - 2。
三角形の総数は、演算シーケンスとして形成され、N =(X - 2)することができる*(X - 1)/ 2。
しかし!三角形において、Yは、z ==ケースを備え、各三角形が(結果は限りキーyを見つけることであるという問題が解決されるように2で割られる== Z)で2回カウントされることに留意されたいです。
(X / 2 + 1)+ 1 = X / 2 - - ( - 1×)で1 - 1 + X / 2からyの値がxに始まる1逆のxが奇数である場合、溶液は、X / 2であります解決策は、x / 2である偶数である - アローン/ 2 - ので、パリティ判断を避けるために、1、我々は(1×)にそれを置きます。
コード:
書式#include <iostreamの> の#include <CStringの> の#include <cstdioを> する#include <cmath> の#include <アルゴリズム> 書式#include <スタック> に#define LL長い長い 使って 名前空間はstd; CONST LL N = 1000005 。 constの MAXN = 11 1E18; const int型 INF = 1E9; LL [ 1000010 ]。 INT )(主 { [ 3 ] = 0。// 预处理 ため(LL I = 4 ; I <=1000000 ; I ++の) A [I] = A [I- 1 ] +((I- 1)*(I- 2)/ 2 - (I- 1)/ 2)/ 2 ; INT N-、 一方((scanfの(" %のD "、およびN-))!= EOF && N-> = 3)ここで、//注意しなければならないN> = 3導くために、N!=合格0ない { のprintf(" %のLLDの\のN- " [N-]、Aを); } 戻り 0 ; }