zoukankan      html  css  js  c++  java
  • 计蒜客 429(腾讯手机地图-pi的精确值)

    腾讯手机地图的定位功能用到了用户手机的多种信号。这当中有的信号的作用范围近。有的信号作用的范围则远一些。有的信号相对于用户在不同的方位强度是不同的。有的则是在不论什么一个方向上信号强度都一致的。

    已知用户面向北方拿着自己的手机,在不同方位的各种信号覆盖区域能够被抽象成以用户为圆心的一系列扇形。已知每一个扇形的半径 r,和每一个扇形的两条边相对于正东方向的夹角度数。

    每一个信号覆盖区域抽象出的扇形都能够通过从第一条边逆时针旋转到第二条边画出。


    输入格式

    请计算一下,用户手机全部信号覆盖到的区域的总面积。

    第一行输入一个整数 T (1 ≤ T ≤ 20),表示数据组数。

    接下来一共 T 组数据,每组数据第一行输入一个整数 n (1 ≤ n ≤ 104),表示各种信号能够抽象出的不同扇形的总个数。接下来输入 n 行,每行 3 个整数表示扇形半径 r (1 ≤ r ≤ 105)、扇形第一条边与正东方向的夹角 α、扇形第二条边与正东方向的夹角 β (-90 ≤ α ≤ β < 270)。

    输出格式

    输出 T 行,每行一个非负浮点数。表示用户手机全部信号覆盖到的区域的范围的总面积。

    每组输出与标准答案绝对误差在 10-3 内均觉得是正确的。

    例子1

    输入:

    1
    4
    2 -30 32
    3 20 81
    3 121 160
    2 141 201

    输出:

    11.030


    这题极端情况 pi*10^10 保留3位小数

    所以 精度非常重要  pi的精度



    #include<cstdio>
    #include<cstring>
    #include<cstdlib>
    #include<algorithm>
    #include<functional>
    #include<iostream>
    #include<cmath>
    #include<cctype>
    #include<ctime>
    #include<iomanip>
    using namespace std;
    #define For(i,n) for(int i=1;i<=n;i++)
    #define Fork(i,k,n) for(int i=k;i<=n;i++)
    #define Rep(i,n) for(int i=0;i<n;i++)
    #define ForD(i,n) for(int i=n;i;i--)
    #define RepD(i,n) for(int i=n;i>=0;i--)
    #define Forp(x) for(int p=pre[x];p;p=next[p])
    #define Forpiter(x) for(int &p=iter[x];p;p=next[p])  
    #define Lson (x<<1)
    #define Rson ((x<<1)+1)
    #define MEM(a) memset(a,0,sizeof(a));
    #define MEMI(a) memset(a,127,sizeof(a));
    #define MEMi(a) memset(a,128,sizeof(a));
    #define INF (2139062143)
    #define F (100000007)
    #define MAXN (100000+10)
    #define eps (1e-6) 
    typedef long long ll;
    ll mul(ll a,ll b){return (a*b)%F;}
    ll add(ll a,ll b){return (a+b)%F;}
    ll sub(ll a,ll b){return (a-b+(a-b)/F*F+F)%F;}
    void upd(ll &a,ll b){a=(a%F+b%F)%F;}
    int n;
    struct seg
    {
    	int a,b,r;
    }a[MAXN];
    ll maxr[5000]={0};
    int main()
    {
    	freopen("A.in","r",stdin);
    //	freopen(".out","w",stdout);
    	int T;
    	cin>>T;    
    	cout.setf(ios::fixed);  
        cout.precision(3);  
    	
    	while(T--)
    	{
    		cin>>n;
    		For(i,n) scanf("%d%d%d",&a[i].r,&a[i].a,&a[i].b);
    	
    		MEM(maxr)
    		For(i,n)
    		{
    			Fork(j,a[i].a,a[i].b-1)
    				maxr[j+90]=max(maxr[j+90],(ll)a[i].r);
    		}
    	
    		long double pi=3.141592653589793238462643383279,S=0;
    		Rep(i,361)
    		{
    			S+=maxr[i]*maxr[i];
    		}
    		cout<<S/(long double)360.000000000*pi<<endl;
    			
    		
    	}
    	
    	return 0;
    }
    

    -





  • 相关阅读:
    SCSI contrller的几种类型的区别
    ScaleIO与XtremSW Cache如何集成呢?
    如何强制使用某一大小的包去ping某个IP地址?
    如何查看ETW Trace?
    图像卷积与滤波的一些知识点(转)
    tensorflow serving 编写配置文件platform_config_file的方法
    python在linux的报错集锦
    某些数组和字符串类型转换(转)
    系统安装-007 CentOS7yum源添加、删除及其yum优化(转)
    Error:Failed to resolve: android.arch.core:common:1.1.0
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/6979413.html
Copyright © 2011-2022 走看看