zoukankan      html  css  js  c++  java
  • 4063: [Cerc2012]Darts

    4063: [Cerc2012]Darts

    Time Limit: 10 Sec  Memory Limit: 128 MB
    Submit: 85  Solved: 53
    [Submit][Status][Discuss]

    Description

    考虑一个扔飞镖的游戏。板子由十个环组成,半径分别为20, 40, 60, 80, 100, 120, 140, 160, 180和200(单位:mm),均以原点为中心。每次投掷的得分取决于飞镖所击中的位置。如果包含飞镖的最小环(可以在圆上)的半径是20 * (11 - p),则得分是p。不在最外环以内的点不得分。你的任务是计算n次投掷之后的得分。

    Input

    第一行一个正整数T,表示有T组数据。

    每组数据第一行一个正整数n,表示有n次投掷,1 <= n <= 10^6。
    接下来n行,每行两个整数x和y,表示一次投掷击中的位置为(x, y),-200 <= x, y <= 200。

    Output

    对于每组数据输出一行,即n次投掷得分的总和。

    Sample Input

    1
    5
    32 -39
    71 89
    -60 80
    0 0
    196 89

    Sample Output

    29

    HINT

     

    Source

    鸣谢Tjz

    题解:其实是道水题= =,不过我由于担心卡精度,所以还是全部不开方,之后一个个判断,然后居然还A掉了= =

    AC程序如下

     1 /**************************************************************
     2     Problem: 4063
     3     User: HansBug
     4     Language: Pascal
     5     Result: Accepted
     6     Time:1372 ms
     7     Memory:224 kb
     8 ****************************************************************/
     9  
    10 var i,j,k,l,m,n,ans:longint;
    11 function doit(x,y:longint):longint;
    12          var z,i:longint;
    13          begin
    14               doit:=0;z:=x*x+y*y;
    15               for i:=10 downto 1 do if z<=(400*(11-i)*(11-i)) then exit(i)
    16          end;
    17 begin
    18      readln(m);
    19      for i:=1 to m do
    20          begin
    21               readln(n);ans:=0;
    22               for j:=1 to n do
    23                   begin
    24                        readln(k,l);
    25                        inc(ans,doit(k,l));
    26                   end;
    27               writeln(ans);
    28          end;
    29 end.

    但是按照我原来思路的程序却狂WA不止,求神犇解释orz:

     1 /**************************************************************
     2     Problem: 4063
     3     User: HansBug
     4     Language: Pascal
     5     Result: Wrong_Answer
     6 ****************************************************************/
     7 var i,j,k,l,m,n,ans:longint;
     8 function doit(x,y:longint):longint;
     9          begin
    10               doit:=(10-(trunc(sqrt(sqr(x)+sqr(y)))-1) div 20);
    11               if doit<0 then doit:=0;
    12          end;
    13 begin
    14      readln(m);
    15      for i:=1 to m do
    16          begin
    17               readln(n);ans:=0;
    18               for j:=1 to n do
    19                   begin
    20                        readln(k,l);
    21                        inc(ans,doit(k,l));
    22                   end;
    23               writeln(ans);
    24          end;
    25 end.
  • 相关阅读:
    枚举求解,也叫暴力破解
    多线程之线程的中止
    beginners with the Multithreading programming
    EditBox control Update Problem (A CString type EditBox control in a loop cannot be updated immidiately)
    有关多线程的一些技术问题
    多线程编程基础知识
    VC的若干实用小技巧 (如何干净的删除一个类)
    进入MFC讲坛的前 (Window 程序详细分析)
    Multithreading using MFC in Plain English: Part I
    关于在VS2005环境下无法从源视图切换到设计视图的解决方案
  • 原文地址:https://www.cnblogs.com/HansBug/p/4487961.html
Copyright © 2011-2022 走看看