首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

Codeforces 277A Calculating Function 題解:找規律 O(1) 解法

     編輯:C++ 入門

題目大意

定義函數 f(n) = -1 + 2 - 3 + 4 ... + (-1)^n * n。給定正整數 n (1 ≤ n ≤ 10^15),求 f(n)。

規律分析

  • n = 4:-1+2-3+4 = 2
  • n = 5:-1+2-3+4-5 = -3

觀察發現:

  • 當 n 為偶數時,f(n) = n / 2。
  • 當 n 為奇數時,f(n) = -(n + 1) / 2。

證明:相鄰兩項 (-k) + (k+1) = 1。偶數項可配對,共 n/2 對,每對和為 1。奇數項最後剩單項 -n,前 n-1 項和為 (n-1)/2,總和 (n-1)/2 - n = -(n+1)/2。

AC 代碼 (C++)

#include <cstdio>
using namespace std;
int main() {
    long long n;
    while (scanf("%lld", &n) != EOF) {
        if (n & 1) printf("%lld\n", -(n + 1) / 2);
        else printf("%lld\n", n / 2);
    }
    return 0;
}

時間複雜度 O(1),完美通過大數據範圍限制。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved