[USACO08OCT]Building A Fence G
阿新 • • 發佈:2022-05-19
來自 luogu P6184 Building A Fence G
方法是找規律
在經過三重迴圈暴力列舉後,
發現了在每個資料之間極其微妙的關係:
當 n=4 和 n=5 時,兩者相差為 3。
當 n=5 和 n=6 時,兩者相差為 2。
當 n=6 和 n=7 時,兩者相差為 10。
當 n=7 和 n=8 時,兩者相差為 3。
當 n=8 和 n=9 時,兩者相差為 21。
當 n=9 和 n=10 時,兩者相差為4。
………………
當然如果這樣還是看不出來,
那我們就換一種方法看看
//假設3前面有1,那麼 3 //1*(1*2+1)=3 2 10 //2*(2*2+1)=10 3 21 //3*(3*2+1)=21 4 36 //4*(4*2+1)=36 …………
通過這種方法可以求出差值,
那麼用前一個數加上這兩個數的差值就珂以得出這個數啦
上程式碼
//by_Hitclyr__Wncr #include<bits/stdc++.h> using namespace std; long long n,m[100010];// n 存放差值 long long sm[100010];// 存放每個的方案數 long long cnt=2; //計數器 long long tot=1; //計數器 int main() { scanf("%lld",&n); for(long long i=4;i<=n;i++,tot++) { m[++cnt]=tot; m[++cnt]=tot*(tot*2+1);//計算差值 } sm[4]=1;//當n=4時方案數為 1 for(long long i=5;i<=n;i++) { sm[i]=sm[i-1]+m[i-1];//計算方案數 } printf("%lld",sm[n]); return 0; }