CSU-ACM寒假集訓選拔-入門題
CSU-ACM寒假集訓選拔-入門題
僅選擇部分有價值的題
J(2165): 時間旅行
Description
假設 Bobo 位於時間軸(數軸)上 t0 點,他要使用時間機器回到區間 (0,?h] 中。
當 Bobo 位於時間軸上 t 點,同時時間機器有 c 單位燃料時,他可以選擇一個滿足 \(\lceil\frac{x}{h}\rceil\leq c\) 的非負整數 x, 那麽時間機器會在 [0,?x]中隨機整數 y,使 Bobo 回到 (t???y) 點,同時消耗 y 單位燃料。 (其中 ????? 表示上取整)
因為時間機器的隨機性,對於給出的參數 h 和時間機器剩余燃料 c,Bobo 想知道能夠保證
- 1?≤?h?≤?\(10^9\)
- 0?≤?c?≤?\(10^9\)
- 數據組數不超過 \(10^5\).
Input
輸入文件包含多組數據,請處理到文件結束。
每組數據包含 2 個整數 h 和 c.
Output
對於每組數據輸出 1 個整數表示 t0 的最大值。
Sample Input
100 99
100 100
100 149
Sample Output
100
101
150
Hint
對於第一組樣例,因為剩余燃料 c?=?99?<?100,Bobo 只能選擇 x?=?0,從而 y?=?0。所以當 \(t_0\)?>?h?=?100 時,Bobo 一定無法回到目標區間。
對於第二組樣例,當 \(t_0\)?=?102 時,選擇 x?=?2,可能隨機到 y?=?1,此時位於 t?=?101,燃料 c?=?99,任務失敗。所以 \(t_0\)?<?102.
要運動到(0, h]內需要消耗燃料(t - h),當燃料恰好為h - 1時無法繼續移動,即c - (t - h) = h - 1, t = c + 1, 註意c < h時答案為h
#include<bits/stdc++.h> using namespace std; int main() { int h1, c1; while (scanf("%d%d", &h1, &c1) != EOF) { if (h1 > c1) printf("%d\n", h1); else printf("%d\n", c1 + 1); } return 0; }
Q(2223): 喜聞樂見的24點
Description
24點是個眾所周知的遊戲,它的規則具體如下
{ 拿一副牌,抽去大小王後,剩下1~10這40張牌(以下用1代替A)。任意抽取4張牌(稱為牌組),用加、減、乘、除把牌面上的數算成24。每張牌必須用且只能用一次。如抽出的牌是3、8、8、9,那麽算式為(9-8)×8×3=24 }
形式化的說,給你4個大於等於1且小於等於13的正整數,問是否能用加、減、乘、除把這四個數字算成24,每個數字必須用且僅用一次。 如果可以請輸出"yes",否則輸出"no"(輸出時不帶引號)
xrdog覺得這個問題過於簡單了,所以xrdog決定給你兩次替換的機會,每次可以選擇四個數字中的某一個並把它替換為[1,13]中的任意一個正整數。
Input
一行四個整數
Output
如果可以把四個數字湊成24請輸出"yes",否則輸出"no"(輸出時不帶引號)
Sample Input
1 1 1 1
Sample Output
yes
Hint
樣例解釋
把一個1變成2,一個1變成6
即有(1+1) * 2 * 6=24
讓前兩個數大數減小數,可以得到一個[0, 13]內的數,然後通過加減運算任意一個數,必然可以得到一個24的因數,將第四個數修改為另一個因數相乘即可得到24點,恒為yes
S(2225): 喜聞樂見的數學題
Description
從自然數1到n中隨機選取m個數字(m<=n),求其中最大數的數學期望是多少?
Input
一行兩個整數表示n,m
n<=8,m<=8
Output
一個實數,表示最大數的數學期望,並保留小數點後兩位。
Sample Input
4 1
Sample Output
2.50
\[
\frac{\sum\limits_{k = m} ^ {n} k C_{k -1} ^ {m - 1}}{C_{n}^{m}}
\]
即從k - 1個數中選m - 1個數,再選k的概率乘以k除以從n個數中選m個數的概率
化簡得\(\frac{m(n + 1)}{m + 1}\)
CSU-ACM寒假集訓選拔-入門題