程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> CF#277 (Div. 2) A.(找規律)

CF#277 (Div. 2) A.(找規律)

編輯:C++入門知識

CF#277 (Div. 2) A.(找規律)


A. Calculating Function time limit per test 1 second memory limit per test 256 megabytes input standard input output standard output 題目鏈接:http://codeforces.com/contest/486/problem/A

For a positive integer n let's define a function f:

f(n)?=??-?1?+?2?-?3?+?..?+?(?-?1)nn

Your task is to calculate f(n) for a given integer n.

Input

The single line contains the positive integer n (1?≤?n?≤?1015).

Output

Print f(n) in a single line.

Sample test(s) input
4
output
2
input
5
output
-3
Note

f(4)?=??-?1?+?2?-?3?+?4?=?2

f(5)?=??-?1?+?2?-?3?+?4?-?5?=??-?3



解題思路:

給你n,求f(n) 。這是一道規律題,首先確定不能暴力求解,因為n實在太大,暴力必超時。同時也開不了那麼大的數組來暴力。

提筆簡單算了幾個,發現f(1) = -1 , f(2) = 1, f(3) = -2, f(4) = 2, f(5) = -3, f(6) = 3··········這樣規律就看出來了,兩個數一組,n/2如果為偶數那麼符號為正,奇數符號為負。並且如果n/2為奇數的話,我們向上取整,即為n / 2 + 1

最後,中間值什麼的都開成long long。

完整代碼:

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;

#pragma comment(linker, "/STACK:102400000,102400000")

typedef long long LL;
typedef double DB;
typedef unsigned uint;
typedef unsigned long long uLL;

/** Constant List .. **/ //{

const int MOD = int(1e9)+7;
const int INF = 0x3f3f3f3f;
const LL INFF = 0x3f3f3f3f3f3f3f3fLL;
const DB EPS = 1e-9;
const DB OO = 1e20;
const DB PI = acos(-1.0); //M_PI;

int main()
{
    #ifdef DoubleQ
    freopen("in.txt","r",stdin);
    #endif
    LL n;
    while(~scanf("%lld",&n))
    {
        LL c = n / 2;
        if(n % 2 != 0)
        {
            c += 1;
            printf("-");
        }
        printf("%lld\n" , c);
    }
}


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