(再帰的)三角形を探します

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 ; 
}

 

おすすめ

転載: www.cnblogs.com/xiaohanghuo/p/11360480.html