zoukankan      html  css  js  c++  java
  • Codeforces Round #703 (Div. 2)__ B. Eastern Exhibition__ 纯纯的思维

    原题链接 https://codeforces.com/contest/1486/problem/B

    题目

    解题思路

    这是个思维题,  算是货仓选址的变式, 想要到达各个点距离最小,我们的目标可以化为先求出分别到x y轴各点的最小值区间,  x坐标轴上满足条件的点数乘以y坐标轴上满足条件的点数. 那么怎么求在x轴坐标与y轴坐标有多少距离之和最小的点的个数呢?

    1).n为奇数, 最小值唯一, 答案即为1   

    2). 偶数时中位数有两个这时取左右中位数这个闭区间里所有的整数都是最小的,解释: 因为取这个区间里的整数时,你往左边偏一个距离那么左边各个点距离之和减小n/2,右边区间各个点距离之和增加n/2,总体没有变化,最后x坐标轴上满足条件的点数乘以y坐标轴上满足条件的点数, 相当于先求出符合的区间, 再x y轴的相乘。

    AC代码

     1 #include <bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 typedef long long ll;
     6 int main()
     7 {
     8     int t;
     9     cin >> t;
    10     while(t --)
    11     {
    12         int n;
    13         cin >> n;
    14         ll x[1010], y[1010];
    15         
    16         for(int i = 0; i < n; i ++)
    17             cin >> x[i] >> y[i];
    18         
    19         if(n % 2 == 1)
    20             puts("1");
    21         else
    22         {    
    23             sort(x, x + n);
    24             sort(y, y + n);
    25             
    26             ll x1 = x[n/2] - x[n/2-1] + 1, y1 = y[n/2] - y[n/2-1] + 1;
    27             printf("%lld
    ", x1 * y1);
    28         }
    29     }
    30     return 0;
    31 }

     最后补充下, 看了别人的题解, 有个写法1LL * cnt1 * cnt2  

    其中用了1LLLL其实代表long long*1LL是为了在计算时,把int类型的变量转化为long long,然后再赋值给long long类型的变量。

     
  • 相关阅读:
    错误:Error:未定义标识符"_TCHAR"
    C#中DateTime应用
    随机打乱数组元素
    C++中的运算符重载
    C#中的运算符重载
    C#访问修饰符
    VS2010中将当前选定项目做为启动项
    VS2010 ctrl+F5闪退解决方法
    IntelliSense: 应输入声明的解决方案
    C++数据类型范围
  • 原文地址:https://www.cnblogs.com/la-la-wanf/p/14418747.html
Copyright © 2011-2022 走看看