Codeforces 570B Simple Game 概率求解,簡單數學思維
阿新 • • 發佈:2018-12-24
題目描述了這麼一個情景,給定一個範圍 1~n ,兩個人(簡記為 a和b)各自隨機選一個整數,然後再在1~n這個範圍內隨機找一個整數(1~n所有整數被選到的概率是相等的),這兩個人誰選擇的數更接近這個隨機數誰就贏。
現在給出選數範圍,給出其中一方(記做b)已經選好的數(記做m),問a應該選哪個數,才能使得a獲勝的機率儘可能大?如果有不唯一的答案,就輸出其最小值
畫根數軸自己想象一下就明白了,如果b選好的數m更偏向1,那麼a應該選m+1,如果更偏向n,a就應該選m-1,
然後就是有一個我覺得有問題的地方:當範圍侷限於1這一個數,然後b選的數也是1的時候,a是不可能贏得,因為這個時候a沒得選只能也選1,然而題目中有約定,如果兩人選的數字同隨機數的距離相等,則判定b贏,也就是說這個情況下a必輸
比賽時第一次提交程式碼的時候覺得這個地方是有爭議不會出資料,結果,呵呵了,交上去先過了pretest,然後就被hack了,這場比賽有好多人憑藉hack這個題就加了上千分。。這特麼冤死啊。。
可以解釋:題目只是讓你輸出成功概率“最大”的點,最大也可以是0啊,不輸出才叫有問題。
莫想當然
By skyword, contest: Codeforces Round #316 (Div. 2), problem: (B) Simple Game, Accepted, # #include<iostream> #include<algorithm> #include<cstdio> #include<queue> #include<cstring> #include<vector> #include<string> #include<cmath> #include<stack> //#define file #define maxn 100010 using namespace std; int m,n; int main() { scanf("%d%d",&n,&m); int t=m-1; int p=m+1; if(m==1&&n==1) { printf("1\n"); } else { if(m>(n/2)) { printf("%d\n",t); } else { printf("%d\n",p); } } }
同場比賽還有個A題,是個簡單模擬,略考驗程式碼水平。。很簡單,就不寫題解了
rating終於漲了一點,還算有點自信
加油吧。。