。。。boj415.学姐的学弟。。。(巧解题)

17 篇文章 0 订阅
5 篇文章 0 订阅

boj415.学姐的学弟。。。(巧解题)

原题大致意思是这样的:

学姐正在写作业,但是她写着写着就开始想学弟,走神的她就开始在纸上画圈圈。这时学弟突然出现了,好奇的学弟问学姐在做什么,惊慌之下,学姐随口说想算一下这些圆覆盖的面积为多少。学弟顿时非常仰慕学姐,但是学姐突然意识到自己不会做,为了自己能给学弟留下好印象,她来求助你帮她算出来这些圆覆盖的面积。
为了简化问题,我们假设所有圆的半径都为1。

输入格式

输入有多组数据。开头为一个整数 T(T10) ,表示数据组数,接下来T组输入,每组开头为一个整数 n(1n100) ,表示学姐画的圆的个数,接下来 n 行,每行两个整数 xi,yi ,表示圆的圆心坐标, 1xi,yi100

输出格式

输出一个数,表示面积并,精确到小数点后五位。

输入样例

1
2
1 1
2 1

输出样例

5.05482
看上去题目还是有点深度的,毕竟你要算重复面积吧,但是一定要注意审清题意哦!这些圆半径均为1,而且圆心只能是整数!一开始考虑的时候我忽视了这一点,让我感觉这道题灰常复杂。。。

做的时候,我主要发现以下几点需要pay attention——

1. 有一些数需要重复使用,初始化和归位思想一定要牢记在心,我为此wa了好几遍。以后你可以在输出前后都把变量输出一遍来检查。

2. 在常数的定义上我们需要小心。这道题目需要引用π,c++中有个很好的做法

#include<math.h>

const double PI=acos(-1.0);

不过在c文件中会给出警告,所以我就直接这么用了

#define PI 3.14159265/const double PI=3.141592653;

也不是不可以,不过上面那个更准。如果你够那啥,可以用逼近公式算哦

#include 
   
   
    
    
#include 
    
    
     
     
#include
     
     
      
      
#include
      
      
       
       
int xy[105][105];
 
int main()
{
    const double PI=3.141592653;
    //freopen("test.txt","r",stdin);
    int t,n;
    int xi,yi;
    int i,j;
    double s=0;
    int xmax=0,ymax=0,xmin=-1,ymin=-1;
    int count1,count2,count3,count4;
    scanf("%d",&t);
    while(t--){
        memset(xy,0,sizeof(xy));
        scanf("%d",&n);
        while(n--){
            scanf("%d %d",&xi,&yi);
            xy[xi][yi]=1;
            if(xmin==-1)xmin=xi-1;
            xmin=((xi-1)
       
       
         xmax)?xi+1:xmax; ymax=((yi+1)>ymax)?yi+1:ymax; } for(i=xmin;i 
         
       
      
      
     
     
    
    
   
   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值