Newcoder 156 B.托米的划分(打表)
Description
歐洲人托米非常喜歡數(shù)字,他經(jīng)常在空閑時(shí)玩下面的游戲
對(duì)于一個(gè)數(shù)字 n n n, 托米會(huì)隨性選中一個(gè)數(shù) p p p, ( 1 < p ≤ n ) (1< p \le n) (1<p≤n), 將 n n n拆分成 u = ? n p ? , v = n ? u u=\lfloor\frac{n}{p}\rfloor,v=n-u u=?pn??,v=n?u,并對(duì) u , v u,v u,v 重復(fù)這個(gè)過程,直到他有了 n n n個(gè) 1 1 1
1317 1317 1317為了挑戰(zhàn)托米,在每次托米進(jìn)行劃分時(shí),會(huì)給托米獎(jiǎng)勵(lì) u ? v u \cdot v u?v 的分?jǐn)?shù),托米希望你能幫他最大化他的得分。
Input
第一行一個(gè)正整數(shù) T T T,下面$ T 行 每 行 一 個(gè) 正 整 數(shù) 行每行一個(gè)正整數(shù) 行每行一個(gè)正整數(shù) n$
( T ≤ 1 0 4 , n ≤ 1 0 9 ) (T\le 10^4,n\le 10^9) (T≤104,n≤109)
Output
對(duì)于每組數(shù)據(jù),輸出托米的最大得分
Sample Input
1 5
Sample Output
10
Solution
求出較小 n n n的答案后歸納法證明 a n s ( n ) = n ( n ? 1 ) 2 ans(n)=\frac{n(n-1)}{2} ans(n)=2n(n?1)?,假設(shè)該結(jié)論對(duì)于所有 k < n k<n k<n均成立,那么有
a n s ( n ) = u ( n ? u ) + u ( u ? 1 ) 2 + ( n ? u ) ( n ? u ? 1 ) 2 = n 2 ? n 2 ans(n)=u(n-u)+\frac{u(u-1)}{2}+\frac{(n-u)(n-u-1)}{2}=\frac{n^2-n}{2} ans(n)=u(n?u)+2u(u?1)?+2(n?u)(n?u?1)?=2n2?n?,故結(jié)論對(duì)任意 n n n成立
Code
#include<cstdio> using namespace std; typedef long long ll; int main() {int T,n; scanf("%d",&T);while(T--){scanf("%d",&n);printf("%lld\n",(ll)n*(n-1)/2);}return 0; }總結(jié)
以上是生活随笔為你收集整理的Newcoder 156 B.托米的划分(打表)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PhpStorm 2022注册失败是什么
- 下一篇: PTA:7-106 愿天下有情人都是失散