1. 程式人生 > >tictac 立體井字棋

tictac 立體井字棋

題目描述:

你玩過井字棋遊戲嗎?它的英文名字叫做tic-tac-toe,是一個古老的博弈遊戲。遊戲在一 個3 £ 3的棋盤上進行。遊戲約定,先在同一條線(橫線、縱線或斜線)上佔有3枚棋子者得 勝。儘管現在藉助計算機可以生成這個遊戲所有可能的情況,但這個古老的遊戲從未失去它 在博弈遊戲中的意義。在它的身上不斷可以看到有新的東西產生。比如,有人將井字棋遊戲 從平面空間擴充套件到三維空間,發明了立體井字棋。立體井字棋的棋盤是一個n £ n £ n的立方 體,遊戲雙方在立方體的這n3個格子中布子。與傳統井字棋遊戲的規則相似,首先佔據了一 條線上的全部n個格子的人獲勝。當然,這個立方體的大小是有考究的,並不是所有的正整 數n都合適: n小了獲勝太易,先行者必勝; n大了獲勝又太難,最後可能雙方都無法獲勝。 為此,我們需要收集與該遊戲有關的一些資料,以決定最佳的n的值。我們想知道,對於某 個n,在遊戲中有多少種獲勝的情況。你的任務是確定,在n £ n £ n的立方體中放n個子,有 多少種布子方案可以使這n個子連成一條線。

輸入:

輸入資料為一個正整數n,表示立方體的大小。

輸出:

輸出為一個正整數,它表示在n3的立方體中n個格子連成一條直線的方案數。

資料範圍限制:

對於30%的資料, n<=10; 對於100%的資料, n <= 1000。

思路:

規律題,沒必要講

Code:

# include <algorithm>
# include <iostream>
# include <cstring>
# include <cstdio>
# include <cctype>
using namespace std;
inline int read()
{
    int ret = 0,w = 0; 
    char ch = 0;
    while(!isdigit(ch)) 
    {
        w |= ch == '-';
        ch = getchar();
    }
    while(isdigit(ch)) 
    {
        ret = (ret << 3) + (ret << 1) + (ch ^ 48),ch = getchar();
    }
    return w ? -ret : ret;
}
inline void write(int x)
{
     if(x < 0) 
        putchar('-'),x = -x;
     if(x > 9) 
        write(x / 10);
     putchar(x % 10 + '0');
}
int main() 
{
    freopen("tictac.in","r",stdin);
    freopen("tictac.out","w",stdout);
    int n;
    n = read();
    long long sum;
    sum = ((n + 2) * (n + 2) * (n + 2) - n * n * n) / 2;
    write(sum);
    return 0;
}