數論問題 答案集有限的情況下一種想法

2021-06-21 12:27:21 字數 945 閱讀 6224

2014.09.09:我現在才知道這就是打表……會打表的可以不用看了……

考慮這個問題:

input

輸入乙個自然數n (1<=n<=1000),請判斷是否存在2*n+1個連續的自然數滿足左邊n+1個數的平方和等於右邊n個數的平方和。

output

如果你找到這樣的解,輸出這2*n+1個數,每兩個數之間乙個空格。

請別先吐槽!!我知道有乙個公式可以很方便地解決這個問題,畢竟那才是這道題的標準解法。現在考慮一下,假設我們不知道這個公式,乙個很自然的想法是根據題意暴力列舉:

#include using namespace std;

typedef unsigned long long ullong;

int main()

;int main()

{ int n=0;

while(cin>>n)

{ for(ullong j=0;j

accepted

!! 哈哈,成功了!!總結

在我興奮過頭迫不及待地把這個訊息告訴給一位同樣搞acm的朋友時,他十分冷靜地指出這種方法「用途十分有限」,不過當時我正在興頭上,沒怎麼在意。之後冷靜下來想了想,發現這方法確實有蠻多的問題。

第乙個問題是,我不知道正式比賽允不允許這樣做,畢竟我只是個新手,沒參加過正式的acm競賽。

第二,跟輸入前計算一樣,此法一樣要求輸入集有限並且較小,輸出同樣能裝入記憶體。

第三,結果必須在可接受的時間內取得,這次是25s,還可接受,錯了也還有時間改,要是算一次就要半個小時,還是想想其他辦法吧。

第四,這種方法並沒解決實際問題,綜合來考慮,演算法並沒有得到優化,自己的能力也沒有得到提公升,只能是純粹為了競賽。如果頻繁使用此法,對自己解題能力的提公升並沒有好處。

因為上述原因,我覺得即使正式比賽允許,這種方法也不要放在前面考慮,如果憑自己的能力用正統方法實在做不出來,那用這種方法過一兩道,倒也無大礙。

有環的情況生成並查集

並查集最基本的查詢和合併就不多講了,直接看函式吧。合併過程中如果出現環,如5 6 7 5,那麼在找最終老大時會出現死迴圈,邊輸入每個節點的老大資訊邊合併可以有效的處理這種情況,具體解析看 注釋。include include include includeusing namespace std co...

UVa 1363 約瑟夫的數論問題

題目 題目鏈結 題意 給定n,k,求出 ni 1 k modi 分析 這題不難,但是我一直wa了七次,我的思路跟書上的是一樣的,一直找錯誤,一直wa,但一直找不到我 錯了,後來無奈,看了劉汝佳的 他實現起來沒有討論k和n誰小誰大,直接比較的,而我先討論了,n k的情況 因為這時候,對於所有的i k,...

UVA 1363 約瑟夫的數論問題

輸入正整數n和k 1 n,k 根據紫書,假設k i的整數部分等於p,則k mod i k i p。於是從i,i 1,i 2,j,k除以它們的商的整數部分都相同,則k除以它們的餘數會是乙個等差數列。這樣,可以在列舉i時把它所在的等差數列之和累加到答案中。這需要計算滿足 k j 和 k i p的最大j。...