Loading

CF570B

题意转化:

一条长为n的路,路上有一点m,问你在什么地方再设一点a可以使路上任意一点到点a的概率大于到点m的概率


所谓概率更大,也就是说从离点m更远的一端到点a的长度小于到点m的长度
(因为此长度内所有的点到a的距离都小于到m的距离)


具体做法如下

  1. 因为这道题的点都是整数,所以先特判一下,当n=1时输出1(路的长度就为1,m<=n,所以m也只能为1,因此必不可能出现一点a使得这个端点到a的距离小于m,只能等于,此时概率为0,就愉快的输出1就好了)

  2. 对于长度不是1的道路,我们做如下处理:

因为上面说了是要使从离m更远的一端到m的距离大于到a的距离

我们把道路的中点mid看做一个分界点,当m处于[0,mid]中时,a要属于(m,n]才能使端点到a的距离更小,且当a与m的差值为1时(即a=m+1),才能使所谓的概率更大

同理,当m处于[mid,n]时,a要属于[0,mid)且a=m-1才能使概率更大


因为长度什么的都是整数,对于除法运算有限制,所以分奇数和偶数两种情况写(注意不要忘记考虑m正好位于中点的情况)

代码

#include<iostream>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<algorithm>
#define maxn 100010

using namespace std;
int n,m;
int main(){
	cin>>n>>m;
	if(n==1){cout<<1;return 0;}
	if(n%2==0&&m>n/2) cout<<m-1;
	if(n%2==0&&m<=n/2) cout<<m+1;
	if(n%2!=0&&m>=n/2+1) cout<<m-1;
	if(n%2!=0&&m<n/2+1) cout<<m+1;
	return 0;
}

码风丑勿喷

posted @ 2020-11-06 10:27  KnightL  阅读(56)  评论(0编辑  收藏  举报