題目背景
忠誠的騎士rai為他心愛的公主hon設計鑽石組墜.
他正在考慮如何切割能夠使鑽石最光彩奪目.
他手中有k顆小鑽石,他知道應該切出n個頂點.
傳說如果每顆鑽石上的三角形總數加起來最少時,能夠達到最好效果.
題目描述
為了更好的研究問題.
rai在平面上畫了n個點,任意三點不共線.
他要把這n個點分成k組,每組至少三個點.
在分完組後 rai把同組的任意兩點之間都連一條邊(即所有點對之間都存在一條邊),不同組點不連邊.
那麼,形成的圖形中,總共最少有多少個由連邊作為三角形邊的三角形?
只有一行,n和k,用空格隔開
最少的三角形數
該題沒有給出資料範圍,如果範圍很小,那就是一道很水很水的題目,但事實是最大的資料 n達到了一億,
沒有發現該題的公式是 c[n,3];我推導的公式是 f[i]=f[i-1]+c[i-1,2];相比之下我的演算法時間複雜度就非常可觀了,因為我的要 n 次迴圈,事實證明,最大的那個資料一分鐘都不能算出來。騙一下吧。
1 #include2using
namespace
std;34
long
long
n,k;
5int f[100]=,g[100]=;67
intmain()811
12 f[0]=1;13
if(n/k==3) g[0]=1;14
15for(long
long i=4;i<=1+n/k;++i)
16,b[100]=,c[100]=;
2122
int len1=0;23
while(i1>0)24
2829
int len2=0;30
while(i2>0)31
3536
for(int j=0;jj)
37for(int k=0;kk)
3845}46
47for(int j=0;j5;++j)
4855}56
5758
if(i==n/k)
59for(int i=0;i<100;++i)
60 g[i]=f[i];
6162}63
64for(int i=0;i<100;++i)
65 g[i]*=k-n%k;
66for(int i=0;i<100;++i)
67if(g[i]>=10)
6869
for(int i=0;i<100;++i)
70 f[i]*=n%k;
71for(int i=0;i<100;++i)
72if(f[i]>=10)
7374
for(int i=0;i<100;++i)
75 g[i]+=f[i];
76for(int i=0;i<100;++i)
77if(g[i]>=10)
7879
int i=99;80
while(g[i]==0) i--;
81while(i>=0) cout<];
82 cout<83return0;
8485 }
過去的,就過去了
人家說兩口子吵架最怕揭老底,可是很多女人卻總是改不了這個毛病。本來已經過去的,當時已經處理完的事,一吵架又都一件一件翻出來說,很傷兩個人的感情。所以,最好能寬容一些,告訴自己 過去的,就過去了。英語中的 water under the bridge 就是這個意思。橋下的水一旦流過,就永遠流過了。就像...
過去的事情
好吧,既然要開始,就從最開始說起 去年6月,從上大學起陪伴我7年的千錘百鍊久經風雨的諾基亞手機,在一次意外墜地之後,終於傷重不治,永遠的失去訊號,宣布退休 當時下了狠心,買了個聯想的樂phone,這可真是割肉了 所以就想著怎麼能挽回點 好吧,當時聯想宣傳的沸沸揚揚的,咱也當個開發者,開發軟體吧 就這...
B君的連通
b國擁有n個城市,其交通系統呈樹狀結構,即任意兩個城市存在且僅存在一條交通線將其連線。a國是b國的敵國企圖秘密發射飛彈打擊b國的交通線,現假設每條交通線都有50 的概率被炸毀,b國希望知道在被炸毀之後,剩下聯通塊的個數的期望是多少?input 乙個數n 2 n 100000 接下來n 1行,每行兩個...