第一次排位賽題解

2021-10-10 23:49:11 字數 2617 閱讀 6718

a - sky數

第一題是典型的進製轉換問題,包括我在內大家最常想到一種**方式就是如下:

(呼叫函式計算12進製和16進製制的sum值)

int sixth

(int n)

return sum;

}int twelve

(int n)

return sum;

}

要注意到以下三點:

b - 哥德**來了可能有用吧

首先剛看到這個題目的時候我的內心是拒絕的,在我好不容易敲完這個**後得到的結果卻是:

很常見的錯誤,就是多層迴圈巢狀導致超時…

這道題要注意的是:

c - 咦!這是嘛呀!

想要成功accept這道題,首先需要了解&(與運算),xor(異或運算)符號,奉上學長手繪真值表:

typedef long long 11

;int main()

return0;

}

d - 倩姐的自我突破

在我努力半個小時後得出time limit的結果後心情是這樣的:

但是萬萬沒想到的是這道題稍微找找規律就能發現其中的貓膩

輸入樣例

輸出樣例21

3243

……nn-1

好傢伙!我直呼好傢伙!就當又學到一招吧,下次看到題先花兩分鐘時間觀察一下輸入輸出之間是否存在某種規律…

e - 看看就好,勸一下自己

這道題是我認為本次考試最溫柔的題了,可是即使如此我卻得到了兩次wrong answer,原因就是輸出格式,切記yes和yes、yes是完全不同的?。

**奉上:

#include 

int main()

for(j=

1;j<=b/

2;j++)if

(sum1==b&&sum2==a)

else

}return0;

}

當然這是每個人都能想到的,然而在今晚學長的講解下又得到了可以優化的地方,那就是約和數打表!

簡單來說就是把每個數的約數和求出來存在陣列裡,在每次用的時候呼叫次函式即可,目的是大大縮短程式執行時間。

f - 熊熊的嘗試

本題涉及到了最簡單的博弈論——巴什博弈(只有一堆n個物品,兩個人輪流從這堆物品中取物,規定每次最少取乙個,最多取m個。最後取光者得勝。)

思考:最多取m個,如果剩下m+1個是不是無論第乙個人如何取,後手都能一次取完

也就是說:無論他們前邊如何拿如果n=(m+1)r+s(換句話說就是當先手拿走s個時,後手總能保證剩下的為m+1的整數倍,則後手必勝,否則先手必勝)

例如:先手拿走s個,後手拿走k個保證剩下的是(m+1)的整數倍,則後手必勝,如果先手拿走s個使得剩下的為(m+1)的整數倍,則先手必勝

if

(n%(m+1)

==0)printf

("second\n");

else

printf

("first\n"

);

對,沒錯,這就結束了!

g - 該爛慫塔,有啥看的

從下往上找,是不是能找到兩個中最大的到上一節點,以此類推

如圖:

for

(int i=n-

1;i>=

0;i--

)}

而如果從上往下找的話就必須要同時從廣度和深度進行,比較所有的值再得出最大值(比較複雜,不推薦)

h - tyloo的s1mple本人

這道題直接暴力就行,找出滿足n=3 * i + 5 * j + 7 * k的i,j,k即可。

i - 可鞥吧

用學長的話來說,又是一道「白給」的題?,這道題涉及到了一點點貪心演算法:

在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的是在某種意義上的區域性最優解。貪心演算法不是對所有問題都能得到整體最優解,關鍵是貪心策略的選擇,選擇的貪心策略必須具備無後效性,即某個狀態以前的過程不會影響以後的狀態,只與當前狀態有關。」

他每次都想把次多的倒入的最多的裡邊,這樣最多的就是最終解:

j - 最後是啥呢

題意:題解:

TW第一次排位賽題解

熊熊學長從小喜歡奇特的東西,而且天生對數字特別敏感,一次偶然的機會,他發現了乙個有趣的四位數2992,這個數,它的十進位制數表示,其四位數字之和為2 9 9 2 22,它的十六進製制數bb0,其四位數字之和也為22,同時它的十二進位制數表示1894,其四位數字之和也為22,啊哈,真是巧啊。熊熊學長非...

第一次排位賽題解(下)

題目鏈結 g 該爛慫塔,有啥看的 輸入資料首先包括乙個整數c,表示測試例項的個數,每個測試例項的第一行是乙個整數n 1 n 100 表示數塔的高度,接下來用n行數字表示數塔,其中第i行有個i個整數,且所有的整數均在區間 0,99 內。output 對於每個測試例項,輸出可能得到的最大和,每個例項的輸...

排位賽題解

十進位制轉二進位制,右移 與 運算結合,遍歷每個數字在二進位制下點每一位。include intmain for int i 0 i 4 i for int i 0 i 4 i a i 1 右移除2 printf d d d d n num 0 num 1 num 2 num 3 return0 題...