poj 2777(线段树)

2014-11-23 22:26:00 ? 作者: ? 浏览: 3

假设所有的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   
#include   
#include   
#include   
#include   
#include   
#include   
  
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 ;  
}  

-->

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: