训练赛:跳伞

跳伞

Description

一群肥宅找不到小姐姐当cp了,觉得人生没有希望干脆重来算了所以他们决定跳天台。

楼下的地上有一个靶子,靶子有十个同心环,半径分别为20,40,60,80,100,120,140,160,180,200

如果肥宅的落点所在最小环(可以在环上)的半径是 20 ⋅ ( 11 − m ) 20⋅(11−m) 20(11m),那么这个肥宅的人生价值就是m。

如果肥宅落在了最大的环以外那么就没有人生价值。

给定n个肥宅的落点坐标,求计算n个肥宅的总人生价值

Input

第一行一个正整数T表示数据组数。
接下来T组数据,
每组数据第一行为一个整数n表示肥宅数量,
接下来n行每行两个整数x,y表示肥宅的落点坐标
0 < n < 1 0 6 , 1 < T < 1 0 3 00<n<106,1<T<103
− 300 ≤ x , y ≤ 300 -300\le x,y\le300 300x,y300

Output

对于每组数据输出一行一个整数表示这组数据肥宅的总人生价值。

  • 依题意直接模拟
  • 需注意当落在原点的时候得10分不是11分!
#include
#include
#include
#define maxn 200005
#define INF 0x3f3f3f3f
#define mst(a) memset(a,0,sizeof a)
#define ll long long
using namespace std;
//题号:肥仔跳楼 

int main()
{
	int t, n;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d",&n);
		double x, y;
		int ans = 0;
		while(n--)
		{
			scanf("%lf%lf",&x,&y);
			double r = sqrt(x*x+y*y);
			if(r <= 200)
			{
				int m = 11- int(r/20+0.99999); //+0.99999 向上取整
				if(x==0&&y==0)m=10;
				ans += m;
			}
		}
		cout << ans << endl;	
	} 
	
	return 0;
}

你可能感兴趣的:(算法)