题意:有A和B玩游戏,从1~n数字里,A选了m,B选了a,假设有一个数字c在1~n中,如果m离c更近或者m和a与c的距离是相等的,都是A胜,已知n和m,问a取多少可以让B的胜率最大。
题解:贪心,如果m在中间靠左,那么a = m + 1,如果m在中间靠右,那么a = m - 1,如果刚好在中间取左边,因为胜率相同取小值。
#include <cstdio>
using namespace std;
int main() {
int n, m, res;
scanf("%d%d", &n, &m);
if (n == 1) {
printf("%d\n", m);
return 0;
}
if (n % 2) {
int mid = n / 2 + 1;
if (m >= mid)
res = m - 1;
else
res = m + 1;
}
else {
int mid = n / 2;
if (m <= mid)
res = m + 1;
else
res = m - 1;
}
printf("%d\n", res);
return 0;
}