题解

33 条题解

  • 1
    @ 2009-08-04 22:03:52

    快排从左下到右上排,若是中心对称,则连接第i和n-i个点的线段的中点都相同。

    都相同就输出这个公共中点,否则无解。

    ps:快排一定要用middle的那种,否则一个点202,一个点超时

    .....................................................无语了

  • 0
    @ 2009-10-11 22:26:56

    哪位大牛解释一下读入的数组及排序用real就一个点106

    而这两个用longint就ac???

  • 0
    @ 2009-10-06 22:24:32

    CAO

    什么嘛。。“!”

  • 0
    @ 2009-11-07 21:06:20

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ├ 测试数据 11:答案正确... 0ms

    ├ 测试数据 12:答案正确... 0ms

    ├ 测试数据 13:答案正确... 0ms

    ├ 测试数据 14:答案正确... 0ms

    ├ 测试数据 15:答案正确... 0ms

    ├ 测试数据 16:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    快排+判断=AC

    program p1100;

    type arr=array [1..20000] of longint;

    var

    n,p,q:longint;

    t1,t2:real;

    a,b:array [1..20000] of longint;

    procedure qsort(var a:arr;l,r:longint);

    var i,j,m,p:longint;

    begin

    i:=l; j:=r;

    m:=a[l];

    repeat

    while a[i]m do dec(j);

    if ij;

    if l=q then writeln('V.I.P. should stay at (',t1:0:1,',',t2:0:1,').') else writeln('This is a dangerous situation!');

    end else writeln('This is a dangerous situation!');

    end.

  • 0
    @ 2009-08-17 18:14:36

    此题 较水 。

    我的做法:

    先排序 按照 横坐标优先 然后纵坐标 从小到大排。

    然后 取 头 和 尾的两个坐标 和 /2 看是不是一直 是同一个值。

    如果是 则有解,否则 无解。

    注:

    1、题目 害人!!!标点符号问题:

    if(anst)

    printf("V.I.P. should stay at (%.1f,%.1f).\n",xans1,yans1);

    else

    printf("This is a dangerous situation!\n");

    2、我用 C++ 接入数据时用 int除2时 直接用除完赋值 double型,没想到 他的除法用的是Int的除法将 小数部分省略掉了。。。。。。血的教训~~!!一定要强制转换!!

    xans = (double(x[s[0]]+x[s[n-1]]))/2;

    yans = (double(y[s[0]]+y[s[n-1]]))/2;

    3、我循环 反正 循环到了 n/2+1

    我循环到 n/2-1时它有一个点不过。。。。

    for(int i = 0;i

  • 0
    @ 2009-08-17 16:26:40

    我倒

    int compare(Point a,Point b) {____int p;____return (p=b.x-a.x)?p:(b.y-a.y);}超时

    #define compare(a,b) ____(((a).x-(b).x)?((a).x-(b).x):((a).y-(b).y))0ms

    宏就是跑得比函数快

  • 0
    @ 2009-08-11 12:39:59

    From 1s

    保卫峰会

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ├ 测试数据 11:答案正确... 0ms

    ├ 测试数据 12:答案正确... 0ms

    ├ 测试数据 13:答案正确... 0ms

    ├ 测试数据 14:答案正确... 25ms

    ├ 测试数据 15:答案正确... 0ms

    ├ 测试数据 16:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:25ms

    Const MAXPTS = 100000;

    Type

    TPoint = Record X, Y: Integer; End;

    Var Pts : Array [1..MAXPTS] of TPoint;

    NumPts : Integer;

    Function Compare (A, B: TPoint) : Boolean;

    Begin

    If (A.X < B.X) then Compare := True

    else If (A.X > B.X) then Compare := False

    else Compare := (A.Y 15) then

    Med := Middle (Pts[L+3], Pts[R-3], Pts[(L+R) div 2 + 2]);

    While (L < R) do

    Begin

    While (L < R) and Compare (Pts[L], Med) do Inc (L);

    While (L < R) and not Compare (Pts[R], Med) do Dec (R);

    If (L < R) then

    Begin

    X := Pts[L]; Pts[L] := Pts[R]; Pts[R] := X;

    End;

    End;

    if Compare (Pts[L], Med) and (L < RX) then

    Inc (L)

    else

    Dec (R);

    QuickSort (LX, R);

    QuickSort (L, RX);

    End;

    End;

    Function BinSearch (X: TPoint) : Integer;

    Var L, R, I: Integer;

    Begin

    L := 1; R := NumPts;

    While (L < R) do

    Begin

    I := (L+R) div 2;

    If Compare (X, Pts) then R := I else L := I+1;

    End;

    If (X.X = Pts[L].X) and (X.Y = Pts[L].Y)

    then BinSearch := L else BinSearch := 0;

    End;

    Function Solve (Var TwiceX, TwiceY: Integer) : Boolean;

    Var SX, SY: Integer;

    I: Integer;

    X: TPoint;

    Begin

    Solve := false;

    QuickSort (1, NumPts);

    SX := 0; SY := 0;

    For I := 1 to NumPts do

    Begin

    SX := SX + Pts.X;

    SY := SY + Pts.Y;

    End;

    If ((SX*2) mod NumPts = 0) and ((SY*2) mod NumPts = 0) then

    Begin

    SX := (SX*2) div NumPts;

    SY := (SY*2) div NumPts;

    Solve := true;

    For I := 1 to NumPts do

    Begin

    X := Pts;

    X.X := SX - X.X;

    X.Y := SY - X.Y;

    If (BinSearch (X) = 0) then Solve := false;

    End;

    End;

    TwiceX := SX;

    TwiceY := SY;

    End;

    Var I: Integer;

    X, Y: Integer;

    Begin

    ReadLn (NumPts);

    If (NumPts > 0) then

    Begin

    For I := 1 to NumPts do

    ReadLn (Pts.X, Pts.Y);

    If Solve (X, Y) then

    WriteLn ('V.I.P. should stay at (', X div 2, '.', (X mod 2) * 5,

    ',', Y div 2, '.', (Y mod 2) * 5, ').')

    else

    WriteLn ('This is a dangerous situation!');

    End;

    End.

    Flag    Accepted

    题号   P1601

    类型(?)   其它

    通过   60人

    提交   299次

    通过率   20%

    难度   1

    提交 讨论 题解

  • 0
    @ 2009-08-10 20:59:27

    猥琐……太猥琐了!

    明明是'!',题目上写得却是'.'……我的AC率啊!

    {————————————————————————}

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ├ 测试数据 11:答案正确... 0ms

    ├ 测试数据 12:答案正确... 0ms

    ├ 测试数据 13:答案正确... 0ms

    ├ 测试数据 14:答案正确... 0ms

    ├ 测试数据 15:答案正确... 0ms

    ├ 测试数据 16:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

  • 0
    @ 2009-08-07 23:02:08

    恩。。

    经过鉴定。。此题巨水。。

    先来点证明,然后再来点提示:

    先证明传说中的最佳位置的横坐标只能是横坐标最大点与最小点的中点:

    采用反证法证明,设a1为横坐标最大点的横坐标,a2为横坐标最小点的横坐标,若命题不成立,即存在ai,aj使得a1+ai=a2+aj=2x,则移项得a1-aj=a2-ai。由于a2是a中的最小值,即a2-ai

  • 0
    @ 2009-08-07 21:18:56

    编译通过...

    ├ 测试数据 01:答案正确... 0ms

    ├ 测试数据 02:答案正确... 0ms

    ├ 测试数据 03:答案正确... 0ms

    ├ 测试数据 04:答案正确... 0ms

    ├ 测试数据 05:答案正确... 0ms

    ├ 测试数据 06:答案正确... 0ms

    ├ 测试数据 07:答案正确... 0ms

    ├ 测试数据 08:答案正确... 0ms

    ├ 测试数据 09:答案正确... 0ms

    ├ 测试数据 10:答案正确... 0ms

    ├ 测试数据 11:答案正确... 0ms

    ├ 测试数据 12:答案正确... 0ms

    ├ 测试数据 13:答案正确... 0ms

    ├ 测试数据 14:答案正确... 0ms

    ├ 测试数据 15:答案正确... 0ms

    ├ 测试数据 16:答案正确... 0ms

    ---|---|---|---|---|---|---|---|-

    Accepted 有效得分:100 有效耗时:0ms

    tmd FUCK!

    那个tion后面是"!".

    BS!

  • 0
    @ 2009-08-05 10:59:26

    Accepted 有效得分:100 有效耗时:0ms

    没有语.输出格式中的V.I.P只有两个.而样例中P后面也有.。。。

    双关键字快排...什么是middle?MS加了函数判断大小就AC了..

  • 0
    @ 2009-08-05 10:46:25

    这题目...

    无语

    交了N遍

  • 0
    @ 2009-08-05 09:13:33

    交了9次,汗……

  • 0
    @ 2009-08-04 20:22:27

    快排从左下到右上排,若是中心对称,则连接第i和n-i个点的线段的中点都相同。

    都相同就输出这个公共中点,否则无解。

    ps:快排一定要用middle的那种,否则一个点202,一个点超时。

  • 0
    @ 2009-08-04 12:37:21

    用快排就202……

    +了个限定就AC了

  • 0
    @ 2009-08-01 18:24:41

    先求出重心。因为坐标都是整数,所以给坐标从上到下、从左到右排个序,然后每次看看正数第i个跟倒数第i个是不是对称就行。

  • 0
    @ 2009-08-01 00:32:35

    题目骗人了,This is a dangerous situation后面是感叹号,而不是句号。

  • 0
    @ 2009-07-31 20:31:29

    有puppy还是不能秒杀,有大牛帮助ac效率高很多啊

  • 0
    @ 2009-08-06 18:13:29

    第一反应是convex hull~ 确实可以做~

    然后~ 看到各位神牛的题解了~

    于是决定不写Graham了

    “快排要取中?”我的快排都是随机的~

  • 0
    @ 2009-08-01 19:53:49

    透露个独家消息

    输出'This is a dangerous situation!有75分哦

    神牛们尽情BS我

    谁能教我二分。。

信息

ID
1601
难度
7
分类
计算几何 | 贪心 点击显示
标签
(无)
递交数
769
已通过
167
通过率
22%
被复制
2
上传者