zoukankan      html  css  js  c++  java
  • 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;
    }
    

    码风丑勿喷

  • 相关阅读:
    从1.5k到18k, 一个程序员的5年成长之路
    我是如何准备技术面试的
    10个惊艳的Ruby单行代码
    经典Spring面试题和答案
    数据分析应该要避免的6个错误
    代码重构的实战经验和那些坑
    勾勒物联网与大数据的数据中心路线图
    共筑Spark大数据引擎的七大工具
    es6学习总结(一)
    vue-cli搭建与vue-router(路由配置)
  • 原文地址:https://www.cnblogs.com/KnightL/p/13935518.html
Copyright © 2011-2022 走看看