CodeForces - 570B 貪心

One day Misha and Andrew were playing a very simple game. First, each player chooses an integer in the range from 1 to n. Let’s assume that Misha chose number m, and Andrew chose number a.

Then, by using a random generator they choose a random integer c in the range between 1 and n (any integer from 1 to n is chosen with the same probability), after which the winner is the player, whose number was closer to c. The boys agreed that if m and a are located on the same distance from c, Misha wins.

Andrew wants to win very much, so he asks you to help him. You know the number selected by Misha, and number n. You need to determine which value of a Andrew must choose, so that the probability of his victory is the highest possible.

More formally, you need to find such integer a (1 ≤ a ≤ n), that the probability that is maximal, where c is the equiprobably chosen integer from 1 to n (inclusive).

Input
The first line contains two integers n and m (1 ≤ m ≤ n ≤ 109) — the range of numbers in the game, and the number selected by Misha respectively.

Output
Print a single number — such value a, that probability that Andrew wins is the highest. If there are multiple such values, print the minimum of them.

Example

Input
3 1
Output
2
Input
4 3
Output
2
Note
In the first sample test: Andrew wins if c is equal to 2 or 3. The probability that Andrew wins is 2 / 3. If Andrew chooses a = 3, the probability of winning will be 1 / 3. If a = 1, the probability of winning is 0.

In the second sample test: Andrew wins if c is equal to 1 and 2. The probability that Andrew wins is 1 / 2. For other choices of a the probability of winning is less.

題意描述:
/概率題
求出概率最大的點,給定1-n,A選擇一點m,B取一點a,
問a取多少可以讓B的勝率最大,B勝:|c-a|<|c-m|,其他均爲A勝
/
/*貪心算法*/
貪心,如果m在中間靠左,那麼a = m + 1,
如果m在中間靠右,那麼a = m - 1,
如果剛好在中間取左邊,因爲勝率相同取小值(m-1)。

#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<queue>
#include<vector>
#include<cstring>
#include<cmath>
#include<stack>
using namespace std;
/***概率題***
   **求出概率最大的點,給定1-n,A選擇一點m,B取一點a,**
  ** 問a取多少可以讓B的勝率最大,B勝:|c-a|<|c-m|,其他均爲A勝**
  ******/
/****貪心算法****/
/****貪心,如果m在中間靠左,那麼a = m + 1,
如果m在中間靠右,那麼a = m - 1,
如果剛好在中間取左邊,因爲勝率相同取小值(m-1)。****/


int main(){
int n,m,ans,mid;
scanf("%d%d",&n,&m);
if(n==1){
    printf("%d\n",m);
    return 0;        //
}
if(n%2){ //n是奇數
    mid=n/2+1;
    if(m>=mid){ //當等於的時候,勝率相同取最小值,所以爲m-1
        ans=m-1;
    }
    else{
        ans=m+1;
    }
}
else{
    mid=n/2;
    if(m<=mid)
        ans=m+1;
    else
        ans=m-1;
}
cout<<ans<<endl;
return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章