你的行事是使这些进度自动操作,你的劳作是使这一个进度自动操作

P1227 [JSOI2008]巨细无遗的博采有益的意见

洛谷P1227 [JSOI2008]宏观的相反相成

标题叙述

在高峰会议时期,必须采用过多保驾保卫参会的各国代表。代表们除了由他和睦的随身保镖尊崇外,组织委员会委员会还派出了1部分此外的新闻员和阻击掌珍重他们。为了使他们的办事有效性,使被保卫的人的平安尽或然得到保持,保镖被分配到被爱戴人的一壹方向。

保镖的最好站立地点应该是那般的:被珍重人应站在具有保镖的对称大旨。不过,只要被保

护人一移动,保镖就很难依据要人的新职责调度地点。大繁多的特务都很难对此作出实时调节。

为此,安全司长决定将该进程翻盘一下,保镖先站好团结的地点,然后要人在他们的对称中央找到确切的职责。如果要人无论走动,大家就对她的克拉玛依不必负责。

你的劳作是使这几个历程自动操作。给出一组N个点(保镖的职位),你要寻觅它们的对称中央S,在这儿被保护人将相对安全。上面以此类推。

第三大家给定一点A以及对称中央S,点A’是点A以S为对称中央产生的像点,即点S是线段AA’的对称中央。

点阵组(X)以S为基本的像点是由每一种点的像点构成的点阵组。X是用来发出对称焦点S的,即点阵X以S为宗旨的像点的聚集即为点阵X本人。

澳门永利会 1

标题叙述

在高峰会议时期,必须选拔过多保镖保卫插手议会的各国代表。代表们除了由他自身的随身保镖保养外,组织委员会委员会还派出了有些别的的耳目和阻击手保养他们。为了使她们的办事有效性,使被保卫的人的平安尽可能获得保险,保镖被分配到被爱抚人的各种方向。

保镖的一级站立地方应该是这么的:被爱抚人应站在颇具保镖的对称焦点。可是,只要被保

护人壹活动,保镖就很难依据要人的新职责调度职分。大诸多的特务职业职员都很难对此作出实时调治。

就此,安全参谋长决定将该进度反败为胜一下,保镖先站好温馨的职分,然后要人在他们的对称焦点找到适当的地方。假诺要人不论走动,大家就对她的平安不必承担。

您的劳作是使这些进度自动操作。给出一组N个点(保镖的岗位),你要寻觅它们的对称主题S,在此刻被体贴人将相对安全。下边依此类推。

首先大家给定一点A以及对称大旨S,点A’是点A以S为对称主旨产生的像点,即点S是线段AA’的对称中央。

点阵组(X)以S为骨干的像点是由各类点的像点组成的点阵组。X是用来发生对称大旨S的,即点阵X以S为着力的像点的成团即为点阵X本身。

澳门永利会 2

输入输出格式

输入格式:

 

输入文件首先行是二个整数N,一<=N<=三千0,接下去的N行每行李包裹罗用空格隔离的多少个整数Xi和Yi,-一千00<=Xi,Yi<=100000,表示那组点阵中第I个点的笛Carl坐标值。

因为任何多个保镖都不会站在同二个岗位上,所以在加以的作业中,任何两点都不均等。但注意保镖能够站在被珍重人同样的地点。

 

输出格式:

 

出口文件仅有1行。尽管给定的点阵能发生3个对称大旨,则输出“V.I.P. should
stay at
(x,y).”,个中X和Y代表中央的笛Carl坐标值,格式为4舍伍入保留至小数点后一个人。

假若该组点阵无对称中央,输出”This is a dangerous
situation!”,注意输出时除了四个单词之间用一个空格隔绝外,不要输出多余空格。

 

输入输出格式

输入格式:

输入文件首先行是叁个整数N,一<=N<=30000,接下去的N行每行包涵用空格隔离的五个整数Xi和Yi,-一千00<=Xi,Yi<=100000,表示那组点阵中第I个点的笛Carl坐标值。

因为任何多少个保镖都不会站在同二个职位上,所以在加以的课业中,任何两点都不雷同。但注意保镖能够站在被保护人同样的职责。

出口格式:

出口文件仅有1行。即使给定的点阵能发出贰个对称大旨,则输出“V.I.P. should
stay at
(x,y).”,在那之中X和Y代表核心的笛Carl坐标值,格式为4舍5入保留至小数点后壹人。

1旦该组点阵无对称核心,输出”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).

澳门永利会,输入输出样例

输入样例#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]第二轮

 

珍宝不知晓这一个题为何会是省选的题、、

澳门永利会 3澳门永利会 4

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 20001
using namespace std;
double xx,yy;
int n,sx,sy,x[N],y[N];
int read()
{
    int x=0,f=1; char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
    return x*f;
}
int main()
{
    n=read();
    for(int i=1;i<=n;i++)
     x[i]=read(),y[i]=read(),sx+=x[i],sy+=y[i];
    xx=1.0*sx/n,yy=1.0*sy/n;
    printf("V.I.P. should stay at (%.1lf,%.1lf).",xx,yy);
    return 0;
}

63分代码(没有思虑并未有对称核心的地方,其实本人以为应该是都有对称中央的)

作者们领悟对称中央一定是一组对称数的高级中学级地方,假诺这几个数有对称核心的话,全数的对称点到对称中央的岗位是同等的,对称中央的职位即为这么些数x的中级,y为那四个数y的中游,大家能够直接将那个平素加起来然后在除以数的个数,那算出来的应当是对称宗旨,然后大家在认清那几个点的对称大目的在于不在那几个地点

一对对称点一定是壹旦四个点的x小,那么另一个的x一定大,那样我们排一下序,看一下是对称点的三个数的对称点是不是在那个地点

澳门永利会 5澳门永利会 6

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#define N 20001
using namespace std;
double xx,yy;
int n,sx,sy;
int read()
{
    int x=0,f=1; char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
    return x*f;
}
struct A
{
    int x,y;
}a[N];
int cmp(A a,A b)
{
    if(a.x!=b.x) return a.x<b.x;
    if(a.y!=b.y) return a.y<b.y; 
}
int main()
{
    n=read();
    for(int i=1;i<=n;i++)
     a[i].x=read(),a[i].y=read(),sx+=a[i].x,sy+=a[i].y;
    xx=1.0*sx/n,yy=1.0*sy/n;
    sort(a+1,a+1+n,cmp);
    for(int i=1;i<=n;i++)
     if(1.0*(a[i].x+a[n-i+1].x)/2!=xx||1.0*(a[i].y+a[n-i+1].y)/2!=yy) 
      {
          printf("This is a dangerous situation!");
          return 0;
      }
    printf("V.I.P. should stay at (%.1lf,%.1lf).",xx,yy);
    return 0;
}

AC代码

 

说明

[JSOI2008]第二轮

代码

无论画画应该都能找到特点啊。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=20000+5;
inline int read()
{
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9') {if(ch=='-') f=-1; ch=getchar();}
    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    return x*f;
}
int n;
struct node
{
    int x,y;
    bool operator < (const node& j) const {
    return x==j.x? y<j.y : x<j.x;
    }    
}a[maxn];
int main()
{
    n=read();
    for(int i=1;i<=n;i++)
    {
        a[i].x=read();a[i].y=read();
    }
    sort(a+1,a+n+1);
    double xx,yy;
        xx=((double)(a[1].x+a[n].x))/2.0;
        yy=((double)(a[1].y+a[n].y))/2.0;
    for(int i=2;i<=(n/2);i++)
    {
        double x,y;
        x=(a[i].x+a[n-i+1].x)/2.0;
        y=(a[i].y+a[n-i+1].y)/2.0;
        if(x!=xx||y!=yy)
        {    printf("This is a dangerous situation!"); return 0;}
    }
    printf("V.I.P. should stay at (%.1lf,%.1lf).",xx,yy);
    return 0;
}

 

相关文章