zoukankan      html  css  js  c++  java
  • 洛谷 P1227 [JSOI2008]完美的对称

    题目描述

    在峰会期间,必须使用许多保镖保卫参加会议的各国代表。代表们除了由他自己的随身保镖保护外,组委会还指派了一些其他的特工和阻击手保护他们。为了使他们的工作卓有成效,使被保卫的人的安全尽可能得到保障,保镖被分配到被保护人的各个方向。

    保镖的最佳站立位置应该是这样的:被保护人应站在所有保镖的对称中心。但是,只要被保

    护人一移动,保镖就很难根据要人的新位置调整位置。大多数的特工都很难对此作出实时调整。

    因此,安全部长决定将该过程逆转一下,保镖先站好自己的位置,然后要人在他们的对称中心找到合适的位置。如果要人随便走动,我们就对他的安全不必负责。

    你的工作是使这个过程自动操作。给出一组N个点(保镖的位置),你要找出它们的对称中心S,在这儿被保护人将相对安全。下面以此类推。

    首先我们给定一点A以及对称中心S,点A'是点A以S为对称中心形成的像点,即点S是线段AA'的对称中心。

    点阵组(X)以S为中心的像点是由每个点的像点组成的点阵组。X是用来产生对称中心S的,即点阵X以S为中心的像点的集合即为点阵X本身。

    输入输出格式

    输入格式:

     

    输入文件第一行是一个整数N,1<=N<=20000,接下来的N行每行包含用空格隔开的两个整数Xi和Yi,-100000<=Xi,Yi<=100000,表示这组点阵中第I个点的笛卡尔坐标值。

    因为任何两个保镖都不会站在同一个位置上,所以在给定的作业中,任何两点都不相同。但注意保镖可以站在被保护人相同的位置。

     

    输出格式:

     

    输出文件仅有一行。如果给定的点阵能产生一个对称中心,则输出“V.I.P. should stay at (x,y).”,其中X和Y代表中心的笛卡尔坐标值,格式为四舍五入保留至小数点后一位。

    如果该组点阵无对称中心,输出"This is a dangerous situation!",注意输出时除了两个单词之间用一个空格隔开外,不要输出多余空格。

     

    输入输出样例

    输入样例#1:
    8
    1 10
    3 6
    6 8
    6 2
    3 -4
    1 0
    -2 -2
    -2 4
    
    输出样例#1:
    V.I.P. should stay at (2.0,3.0).

    说明

    [JSOI2008]第二轮

    卡了我一个多小时的省选题,居然是sort+O(N)判断~~~我日,我咋也没想到啊

     1 #include<iostream>
     2 #include<algorithm>
     3 #include<cstring>
     4 #include<cstdio>
     5 #include<cstdlib>
     6 using namespace std;
     7 #define maxn 20010
     8 struct Node{ double x,y; }node[maxn];
     9 int n;
    10 bool cmp(Node a,Node b){
    11     if(a.x!=b.x) return a.x<b.x;
    12     return a.y<b.y;
    13 }
    14 int main(){
    15     scanf("%d",&n);
    16     for(int i=1;i<=n;i++)
    17         scanf("%lf%lf",&node[i].x,&node[i].y);
    18     sort(node+1,node+n+1,cmp);
    19 //    for(int i=1;i<=n;i++)
    20 //        printf("%lf %lf
    ",node[i].x,node[i].y);
    21     double lastx=(node[1].x+node[n].x)/2.0;
    22     double lasty=(node[1].y+node[n].y)/2.0;
    23     for(int i=2;i<=n/2;i++){
    24         double p=(node[i].x+node[n-i+1].x)/2.0;
    25         double q=(node[i].y+node[n-i+1].y)/2.0;
    26         if(p==lastx&&q==lasty) continue;
    27         else {
    28             printf("This is a dangerous situation!");
    29             return 0;
    30         }
    31     }
    32     printf("V.I.P. should stay at (%.1lf,",lastx);
    33     printf("%.1lf).",lasty);
    34     return 0;
    35 }
  • 相关阅读:
    mac c++编译出现segmentation fault :11错误
    ssh 连接缓慢解决方法
    237. Delete Node in a Linked List
    203. Remove Linked List Elements
    Inversion of Control Containers and the Dependency Injection pattern
    82. Remove Duplicates from Sorted List II
    83. Remove Duplicates from Sorted List
    SxsTrace
    使用CCleaner卸载chrome
    decimal and double ToString problem
  • 原文地址:https://www.cnblogs.com/suishiguang/p/6607140.html
Copyright © 2011-2022 走看看