程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> poj 2777(線段樹)

poj 2777(線段樹)

編輯:C++入門知識

假設所有的2n個數據的位置分別從1~2n標號。

現在假設其中第ai個數據(雙胞胎),和bi。那麼他們的位置則相差i + 1個位置;

同理,那麼所有n組雙胞胎相差的數據sum( bi - ai ) ( i = 1 ......2n )  = 2 + 3 +4 + .........+ n + n + 1 = n ( n + 3 )  / 2 ;

所有位置的和sum( ai + bi ) = ( 1 + 2 *n ) * 2 * n / 2 ;

又因為sum( 2 * ai  + bi - ai ) = 2sum( ai ) + sum( bi - ai )

所有推出每個位置的值為sum( ai )  = ( 3 * n - 1 ) * n / 4 ;

因為每個位置的值都是一個非負整數,所有只需要滿足sum(ai) 都是整數

 

#include<iostream>   
#include<cstdio>   
#include<cstring>   
#include<cmath>   
#include<algorithm>   
#include<bitset>   
#include<iomanip>   
  
using namespace std;  
  
int main()  
{  
    int n ;  
    while( ~scanf( "%d" , &n ) , n )   
    {  
        if( n % 4 == 0 || ( 3 * n - 1 ) % 4 == 0 )  
            printf( "Y\n" ) ;  
        else  
            printf( "N\n" ) ;  
    }  
    return 0 ;  
}  

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved