#include <iostream> using namespace std; int main() { int n, m, k; cin >> n >> m >> k; if(k <= 0 || n <= 0 || k > n){//排除掉的边界值 cout << 0; } else if(n == 1){ cout << m; } else{ int left = k - 1; int right = n - k;//左右的坐标,默认到中间依次拿本身的数 cout << min(left, right) + 1; } return 0; }
第一步永远是除去边界值,随后判断特殊情况就是两边没人的时候。最后这个判断有点难,我看别人的题解勉强看懂了一点,就是默认从两边到所在的K处,每移动一个人都+1,初始值就是边界上都是1,往后两边依次+1,由条件限制,不能多超过两个及以上,所以就算左右到边界最小的值,以此为两边的最大值,然后根据题意这个最大值+1即为最后的结果