【结论】立体井字棋(jzoj 2124)
生活随笔
收集整理的這篇文章主要介紹了
【结论】立体井字棋(jzoj 2124)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
立體井字棋
題目大意:
在一個n×n×n的正方體中,由n個格子連成一條直線的方案數(多少種可能用n個格子連成一條直線)
樣例輸入
2
樣例輸出
28
數據范圍限制
對于30%的數據, n<=10;
對于100%的數據, n <= 1000。
解題思路:
這道題很顯然是一道推理題,他有兩種方法,我們先講一下眾多人使用的方法一:
首先我們在這個方形外面圍上一層正方形(如下圖),因為長度兩邊都加了一,多以大正方形的體積是(n+2)3(n+2)^{3}(n+2)3,而紅色部分,原來的正方形體積為n3n^{3}n3,就可以求出外面圍了(n+2)3?n3(n+2)^{3}-n^{3}(n+2)3?n3個正方形,然后運用兩點確定一條直線的定理,還有把符合題意的每一條線延長可以穿過外面的兩個正方形,可以得知符合題意的正方形個數為(n+2)3?n32\frac{(n+2)^{3}-n^{3}}{2}2(n+2)3?n3?
本蒟蒻使用的方法二:
把全圖的線的種類分為三種(只有一個坐標的差異,兩個坐標的差異,三個坐標的差異),然后又可以細分:第一種:從正面,左面,上面各分成4個(n×n個),總共3×n×n個,第二種:從正面兩個45度角,側面兩個,上面兩個各有n個,總共6n個,第三種:是四個斜對角,就4個
總共3×n×n+6n+43×n×n+6n+43×n×n+6n+4個
#include<cstdio> #include<iostream> using namespace std; int n; int main() {scanf("%d",&n);if (n==1) printf("1");//特殊請款else printf("%d",n*n*3+n*6+4);//直接輸出return 0; }總結
以上是生活随笔為你收集整理的【结论】立体井字棋(jzoj 2124)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么叫做第二次呼吸
- 下一篇: 【图论】【最短路】【SPFA】【USAC