7.14 C題

來源:互聯網
上載者:User

標籤:acm   c++   計算幾何   

題目連結:http://code.bupt.edu.cn/problem/p/415/

學姐的學弟 時間限制1000 ms 記憶體限制 65536 KB題目描述

學姐正在寫作業,但是她寫著寫著就開始想學弟,走神的她就開始在紙上畫圈圈。這時學弟突然出現了,好奇的學弟問學姐在做什麼,驚慌之下,學姐隨口說想算一下這些圓覆蓋的面積為多少。學弟頓時非常仰慕學姐,但是學姐突然意識到自己不會做,為了自己能給學弟留下好印象,她來求助你幫她算出來這些圓覆蓋的面積。
為了簡化問題,我們假設所有圓的半徑都為1。

輸入格式

輸入有多組資料。開頭為一個整數T(T≤10) ,表示資料群組數,接下來T組輸入,每組開頭為一個整數n(1≤n≤100) ,表示學姐畫的圓的個數,接下來n 行,每行兩個整數x i ,y i  ,表示圓的圓心座標,1≤x i ,y i ≤100 。

輸出格式

輸出一個數,表示面積並,精確到小數點後五位。

輸入範例
121 12 1
輸出範例
5.05482

解決這種問題,一般都不可能像初中高中那樣求,要以電腦思維的方式來思考,由於資料小於100,我們可以以遍曆每一個格子,分別計算面積的方式來求得累積和。對於每個格子來說,只有三種情況,,,另一種就是全被圓覆蓋的,只需要統計每一種出現的次數,在乘以各自圖片的面積,就可以解出,值得注意的事,遍曆應(0,0)遍曆到(100,100),當時我只遍曆到(99,99),坑了很久、、T_T


代碼:

#include <iostream>#include <cstdio>#include <cstring>#include <cmath>using namespace std;const double pi=acos(-1.0);int cir[111][111];int main(){    double ans;    double s1=pi/4;    double s2=pi/6+sqrt(3)/4;    double s3=1.0;    int t;    scanf("%d",&t);    while(t--)    {        ans=0;        memset(cir,0,sizeof(cir));        int n;        scanf("%d",&n);        for(int i=0;i<n;i++)        {            int x,y;            scanf("%d%d",&x,&y);            cir[x][y]=1;        }        for(int i=0;i<=100;i++)            for(int j=0;j<=100;j++)            {                if(cir[i][j]+cir[i+1][j]+cir[i][j+1]+cir[i+1][j+1]==1)                    ans+=s1;                else if((cir[i][j]==1&&cir[i+1][j+1]==1)||(cir[i+1][j]==1&&cir[i][j+1]==1))                    ans+=s3;                else if(!(cir[i][j]+cir[i+1][j]+cir[i][j+1]+cir[i+1][j+1]==0))                    ans+=s2;            }        printf("%.5f\n",ans);    }    return 0;}


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.