1. 程式人生 > >ACM團隊招新賽題解

ACM團隊招新賽題解

標程程式碼全部為C語言編寫。程式碼中的#if LOCAL_ #endif為本地一些除錯內容,可以忽略。

XennyA+B1)【容易】【簽到】

簽到題,做不出的話可能你有點不太適合ACM了。

 

 

 

XennyA+B2)【容易】【簽到】

也沒什麼好說的,用一個迴圈控制輸入的次數就行了

 

 

XennyA+B3)【困難】【模擬】

這是本次比賽最難的題目,用意在於賽後你們看見此題題解可以開拓一下思維方式,不要侷限於中學的思維,要掌握計算機。

乍一看這題沒法做,怎麼去存AB兩個這麼大的數字,但我們可以用陣列儲存這兩個數字,然後模擬手算,一位一位的相加,滿

10進位,使用陣列模擬的方式便可以很快的解決掉這道題目。值得注意的是char陣列儲存的是ASCII碼,注意之間轉換。

注:scanf中的第一個%s前的空格不是沒有意義的,它是為了吸收緩衝區的東西,防止造成錯誤。

 

 

Xenny的三角形(1)【容易】【簽到】

三角形任意兩邊之和大於第三邊,根據這個判斷即可。

 

 

Xenny的三角形(2)【簡單】【列舉】

直角三角形滿足勾股定理,而且這道題資料範圍不大。

直接迴圈列舉1C的每個數i,再判斷sqrt(C^2 - i^2)是不是一個整數即可。

注意輸出條件!輸出的時候得判斷一下哪個數小一點,先輸出較小數字。

 

 

Xenny的三角形(3)【一般】【思維】

題意即為給你RT三角形的一條直角邊A,找BC

直接運用勾股數的定義求即可。此題若不知道勾股數的相關規律較難,但也不難找出規律。

 

 

瞭解規律後,這題變得很簡單了。直接套用即可,同時判斷一下BC是否合法。

 

 

Xenny的數學題(1)【簡單】【思維】

L大於等於4

L為偶數時,一定可以拼出矩形,最大面積即為最接近正方形的時候。

L為奇數時,肯定不能拼一個沒有多餘部分的矩形。

 

 

Xenny的數學題(2
)【簡單】【簡單數學】

直接計算殭屍走到植物面前需要幾秒,每秒承受一顆豆子,判斷能否射死殭屍即可。

 

 

Xenny的數學題(3)【一般】【簡單幾何】

這題應該算簡單題,但涉及到精度計算,還是歸為一般算了。

高中數學知識,兩種方式,建座標系或者幾何法。下面給出幾何法的過程。

不要看過程運算量大,計算機的存在就是幫你運算。所以也希望各位能從這道題中領悟些東西。

 

 

 

程式碼1

 

 

 

程式碼2

 

 

 

程式碼3

 

 

 

Xenny的數字【簡單】【思維】

就是讓你找到三個數a+b+c = x,而且都不是3的倍數。

a = 1

如果x-2不是三的倍數,則11x-2滿足題意;

如果x-2是三的倍數,那麼x-3肯定不是三的倍數,此時12x-3滿足題意。

 

 

 

Xenny的防AK題【一般】【位運算+思維+猜】

為什麼說這道題一般呢,如果我把資料範圍開大一點這道題肯定就是非常困難的題目了。但我的每個數字Ai-th都是小於1e7的,所以你可以開一個1e7的陣列儲存每個數字出現的次數,最後再遍歷一遍尋找出現次數為奇數次的數字即可,不管是空間還是時間限制都是允許的。如果你沒有做出這道題,可以嘗試用這種方法解決這道題。

正解是需要用到異或位運算操作,何為異或,自行搜尋。

異或有這麼一個性質:A^B^B = A;

根據這個性質,我們在輸入的時候把每個值都異或。最後的得到的Num即為我們要求的兩個數字AB的異或值,現在要做的就是如何分解得到兩個數。

Num中一定有不為0的二進位制位置(易理解),假設第k位不為0,則AB的第k位不為0,陣列中的其餘的數若有第k位不為0的數對,則AB與這些數對異或,可以得到AB,最後再讓此數與Num異或,則得到另外一值。

 

 

還是再給你們寫一下用第一種方法解決的程式碼

 

 

還有一點,我說了這道題目我只給了一組資料,而且範圍在[600,800]之間,你有猜到我的答案嗎?沒錯,就是760,所以你直接輸出760也可以AC掉這題。

 

  1. S.可能你們知道while(scanf(...) != EOF)是多組輸入,但我的題解中多用while(~scanf(...))~其實就是取非符號,每個語句都是有返回值的,!= EOF這種方式就是說scanf的返回值不能是EOF,而~EOF恰好等於0,二者是等價的,所以可以這樣進行多組輸入。具體關於EOF以及~操作的解釋各位可以自行搜尋。