description
在比賽的時候,1y(1 次ac)是很值得高興的事情。但很多大牛總會因為很弱智的錯誤先wa 一次,再ac。
而很多時候,這點罰時的差距使得他們與金牌無緣。弱智錯誤系列中最顯著的就是忘記加龍龍。
龍龍外國人叫它作long long,表示64位整數,輸入與輸出64位整數則可以使用例如
scanf(「%lld」, &a)與printf(「%lld」, a)的形式完成。很多圖論和動態規劃的題目中,
雖然題目說最後輸出的答案是32 位的整數,但中間計算的過程有時會超過int,這時我們就要使用龍龍了。
可惜的是,很多同學剛開始學寫程式都是用vc的,在vc上是無法使用long long的,我們要用__int64
代替,輸入與輸出64位整數則可以使用例如scanf(「%i64d」, &a)與printf(「%i64d」, a)的形式完成。
但是提交上oj 的時候,如果使用gcc或g++,都只支援long long,我們在提交時又得按照上邊的改回來(的確挺麻煩,窘)。
為了讓知道龍龍的同學們記得使用龍龍,不知道的學習使用龍龍,下邊有個很簡單的函式,希望大家
求出它的返回值:
long long h(int n)
return res;
}不過直接使用這個函式是會超時的,必須改造這個函式,當然這一定難不到未來的程式設計高手——你
輸入格式
第一行是數字t(t<=1021)表示case數,接下來t 行,每行乙個整數n,n是乙個32 位整數(保證可以由int 表示)。
輸出格式
函式返回值。
輸入樣例
2 5
10輸出樣例
通過列舉資料分析發現:
1~n中的任意乙個數字 i (1 <= i <= n)都和第 i 個以及第 i + 1個商有關
以n = 25為例:
1 = 25 - 12 = 13個
2 = 12 - 8 = 4個
3 = 8 - 6 = 2個
4 = 6 - 5 = 1個
5 = 5 - 4 = 1個
6 = 4 - 3 = 1 個
7 = 3 - 3 = 0個
8 = 3 - 2 = 1個
9 = 2 - 2 = 0個
… 這個規律有什麼意義?要求出每個數字分別有多少個還不是要把所有商求出來?
其實不然,再觀察資料可以發現當第乙個重複的商(即n(i) == n(i + 1))出現時
我們已經求得1~i中每乙個數字的個數
上例中重複的商3(i = 6 and i + 1 = 7)出現時,已求得
1 = 25 - 12 = 13個
2 = 12 - 8 = 4個
3 = 8 - 6 = 2個
4 = 6 - 5 = 1個
5 = 5 - 4 = 1個
6 = 4 - 3 = 1 個
此時我們已經獲得了13 + 4 + 2 + 1 + 1 + 1 = 22個商,只需再求n - 22 = 25 - 22 = 3個商
通過這個規律可以極大的減少運算次數,也就不會超時了
#include
long
long h(int n);
int main()
return0;}
long
long h(int n)
for(i = 1; i <= n - count; i ++)
res += n / i;
return res;
}
ACM複習(34)9519 偷吃
超牛和lyd最近買了好多零食啊,可是呢,因為龍教很貪吃,經常偷吃他們的東西。為了要讓龍教吃不到,他們想到了個方法,他們叫pkkj給他們n個箱子,然後他們就把箱子排成一列,把他們買回來的三種零食 包括薯片,果凍還有餅乾 放進那裡面。然後讓龍教猜箱子裡面的食物,只有兩次機會,猜不到就沒得吃。所以他們想讓...
ACM複習(45)10680 飛機
description 某國成立了乙個新的航空公司。該公司準備採購飛機來運營屬下的兩條航線a與b。他們聯絡了一些飛機製造商,這些製造商提供了他們飛機的資料。資料裡面記錄了每種飛機的載客量,以及他們飛航線a與航線b所需要的燃油量。通過市場調查,該公司摸清了兩條航線的日均客流量。已知該航空公司每日能夠採...
ACM入門(筆試複習)指南
從大一下冊開始參加程式設計競賽,到大三下,沒給學校帶來什麼榮譽,倒是學校和老師無私的鍛鍊了我。雖然是acm出身,我一直不敢寫關於acm相關的部落格。可能內心一直覺得自己太菜了,怕大佬們笑話吧。acm知識點圖譜 這個是noip的,跟acm差不多 因為是入門 筆試複習 教程,所以我就不去整那些我自己看不...