ACM團隊招新賽題解
標程程式碼全部為C語言編寫。程式碼中的#if LOCAL_ 至#endif為本地一些除錯內容,可以忽略。
Xenny的A+B(1)【容易】【簽到】
簽到題,做不出的話可能你有點不太適合ACM了。
Xenny的A+B(2)【容易】【簽到】
也沒什麼好說的,用一個迴圈控制輸入的次數就行了
Xenny的A+B(3)【困難】【模擬】
這是本次比賽最難的題目,用意在於賽後你們看見此題題解可以開拓一下思維方式,不要侷限於中學的思維,要掌握計算機。
乍一看這題沒法做,怎麼去存A和B兩個這麼大的數字,但我們可以用陣列儲存這兩個數字,然後模擬手算,一位一位的相加,滿
注:scanf中的第一個%s前的空格不是沒有意義的,它是為了吸收緩衝區的東西,防止造成錯誤。
Xenny的三角形(1)【容易】【簽到】
三角形任意兩邊之和大於第三邊,根據這個判斷即可。
Xenny的三角形(2)【簡單】【列舉】
直角三角形滿足勾股定理,而且這道題資料範圍不大。
直接迴圈列舉1至C的每個數i,再判斷sqrt(C^2 - i^2)是不是一個整數即可。
注意輸出條件!輸出的時候得判斷一下哪個數小一點,先輸出較小數字。
Xenny的三角形(3)【一般】【思維】
題意即為給你RT三角形的一條直角邊A,找B和C。
直接運用勾股數的定義求即可。此題若不知道勾股數的相關規律較難,但也不難找出規律。
瞭解規律後,這題變得很簡單了。直接套用即可,同時判斷一下B,C是否合法。
Xenny的數學題(1)【簡單】【思維】
L大於等於4;
當L為偶數時,一定可以拼出矩形,最大面積即為最接近正方形的時候。
當L為奇數時,肯定不能拼一個沒有多餘部分的矩形。
Xenny的數學題(2 )【簡單】【簡單數學】
直接計算殭屍走到植物面前需要幾秒,每秒承受一顆豆子,判斷能否射死殭屍即可。
Xenny的數學題(3)【一般】【簡單幾何】
這題應該算簡單題,但涉及到精度計算,還是歸為一般算了。
高中數學知識,兩種方式,建座標系或者幾何法。下面給出幾何法的過程。
不要看過程運算量大,計算機的存在就是幫你運算。所以也希望各位能從這道題中領悟些東西。
程式碼1:
程式碼2:
程式碼3:
Xenny的數字【簡單】【思維】
就是讓你找到三個數a+b+c = x,而且都不是3的倍數。
令a = 1;
如果x-2不是三的倍數,則1,1,x-2滿足題意;
如果x-2是三的倍數,那麼x-3肯定不是三的倍數,此時1,2,x-3滿足題意。
Xenny的防AK題【一般】【位運算+思維+猜】
為什麼說這道題一般呢,如果我把資料範圍開大一點這道題肯定就是非常困難的題目了。但我的每個數字Ai-th都是小於1e7的,所以你可以開一個1e7的陣列儲存每個數字出現的次數,最後再遍歷一遍尋找出現次數為奇數次的數字即可,不管是空間還是時間限制都是允許的。如果你沒有做出這道題,可以嘗試用這種方法解決這道題。
正解是需要用到異或位運算操作,何為異或,自行搜尋。
異或有這麼一個性質:A^B^B = A;
根據這個性質,我們在輸入的時候把每個值都異或。最後的得到的Num即為我們要求的兩個數字A,B的異或值,現在要做的就是如何分解得到兩個數。
Num中一定有不為0的二進位制位置(易理解),假設第k位不為0,則A或B的第k位不為0,陣列中的其餘的數若有第k位不為0的數對,則A或B與這些數對異或,可以得到A或B,最後再讓此數與Num異或,則得到另外一值。
還是再給你們寫一下用第一種方法解決的程式碼
還有一點,我說了這道題目我只給了一組資料,而且範圍在[600,800]之間,你有猜到我的答案嗎?沒錯,就是760,所以你直接輸出760也可以AC掉這題。
- S.可能你們知道while(scanf(...) != EOF)是多組輸入,但我的題解中多用while(~scanf(...)),~其實就是取非符號,每個語句都是有返回值的,!= EOF這種方式就是說scanf的返回值不能是EOF,而~EOF恰好等於0,二者是等價的,所以可以這樣進行多組輸入。具體關於EOF以及~操作的解釋各位可以自行搜尋。