前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >4063: [Cerc2012]Darts

4063: [Cerc2012]Darts

作者头像
HansBug
发布2018-04-11 10:43:38
6440
发布2018-04-11 10:43:38
举报
文章被收录于专栏:HansBug's LabHansBug's Lab

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程序如下

代码语言:javascript
复制
 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:

代码语言:javascript
复制
 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.
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-05-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 4063: [Cerc2012]Darts
  • Description
  • Input
  • Output
  • Sample Input
  • Sample Output
  • HINT
  • Source
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档