• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Why so serious? --[NKU]schindlerlee

            zju2589 不重合的n個圓形成的區域


            ??1?/*?
            ??2??*?SOUR:zju2589
            ??3??*?ALGO:computational?geomtry?計算平面上不重合的n個圓形成的區域
            ??4??*?基本的方法,如圖所示,將所有圓之間的交點作為點,將在同一個圓上的所有交點之間的弧作
            ??5??*?為邊建立一張有向圖,之后可以利用平面圖的歐拉定理
            ??6??*???????????V?-?E?+?F?=?2
            ??7??*?由于V已知,E已知,F就可以求出來了。
            ??8??*?由于歐拉定理是對一張無向連通圖成立的,如果圖有多個連通塊的時候需要對歐拉定理做一些
            ??9??*?修改。由于多個有向圖的面共享最外邊的面,所以設聯通塊的個數為n
            ?10??*?V?-?E?+?F?=?2?*?n?,?但是需要減去n個聯通塊共享的最大平面
            ?11??*?所以?F?=?n?+?1?+?E?-?V;
            ?12??*?DATE:?2010年?07月?08日?星期四?14:49:41?CST
            ?13??*?COMM:5
            ?14??*?*/
            ?15?const?int?N?=?64;
            ?16?const?double?eps?=?1e-8;
            ?17?int?n,?vis[N],?g[N][N];
            ?18?double?r[N];
            ?19?struct?point_t?{
            ?20?????double?x,?y;
            ?21?????point_t(){}
            ?22?????point_t(double?a,?double?b){x?=?a,?y?=?b;}?
            ?23?}c[N];
            ?24?
            ?25?int?dcmp(double?x)?{?return?(x?>?eps)?-?(x?<?-eps);}?
            ?26?bool?operator?<?(point_t?a,point_t?b)?
            ?27?{
            ?28???if?(dcmp(a.x?-?b.x))?{
            ?29???????return?a.x?<?b.x;
            ?30???}
            ?31???return?dcmp(a.y?-?b.y)?<?0;
            ?32?}
            ?33?
            ?34?point_t?operator?+?(point_t?a,?point_t?b)?{?return?point_t(a.x+b.x,?a.y+b.y);}
            ?35?point_t?operator?-?(point_t?a,?point_t?b)?{?return?point_t(a.x-b.x,?a.y-b.y);}
            ?36?double?dist(point_t?a,?point_t?b)?{?return?hypot(a.x-b.x,?a.y-b.y);}
            ?37?double?sqr(double?x)?{?return?x?*?x;}
            ?38?point_t?normal(point_t?a)?{?return?point_t(a.x?/?hypot(a.x,?a.y),?a.y?/?hypot(a.x,?a.y));}
            ?39?point_t?scale(point_t?a,?double?fac)?{?return?point_t(a.x?*?fac,?a.y?*?fac);}
            ?40?bool?intersect(point_t?c1,?double?r1,?point_t?c2,?double?r2,?point_t?&a,?point_t?&b)
            ?41?{
            ?42???double?d?=?dist(c1,?c2);
            ?43???if?(d?<?fabs(r1?-?r2)?-?eps?||?d?>?r1?+?r2?+?eps)?{
            ?44???????return?false;
            ?45???}
            ?46???double?len?=?(sqr(r1)?-?sqr(r2)?+?sqr(d))?/?2.0?/?d;
            ?47???double?h?=?sqrt(sqr(r1)?-?sqr(len));
            ?48???point_t?t?=?normal(c2?-?c1);
            ?49???point_t?p?=?c1?+?scale(t,?len);
            ?50???point_t?v?=?scale(point_t(-t.y,?t.x),?h);
            ?51???a?=?p?+?v,?b?=?p?-v;
            ?52???return?true;
            ?53?}
            ?54?
            ?55?void?init()
            ?56?{
            ?57???int?i;
            ?58???memset(g,?0,?sizeof(g));
            ?59???memset(vis,?0,?sizeof(vis));
            ?60???for?(i?=?0;i?<?n;i++)?{
            ?61???????g[i][i]?=?1;
            ?62???}
            ?63?}
            ?64?
            ?65?int?main()
            ?66?{
            ?67???int?testcase,?i,?j,?k;
            ?68???scanf("%d",?&testcase);
            ?69???while?(testcase--)?{
            ?70???????scanf("%d",?&n);
            ?71???????set?<point_t>?allpoint,?p[64];
            ?72???????for?(i?=?0;i?<?n;i++)?{
            ?73???????????scanf("%lf?%lf?%lf",?&c[i].x,?&c[i].y,?&r[i]);
            ?74???????}
            ?75???????init();
            ?76???????for?(i?=?0;i?<?n;i++)?{
            ?77???????????for?(j?=?i?+?1;j?<?n;j++)?{
            ?78???????????????point_t?a,?b;
            ?79???????????????if?(intersect(c[i],?r[i],?c[j],?r[j],?a,?b))?{
            ?80???????????????????allpoint.insert(a),?allpoint.insert(b);
            ?81???????????????????p[i].insert(a),?p[i].insert(b);
            ?82???????????????????p[j].insert(a),?p[j].insert(b);
            ?83???????????????????g[i][j]?=?g[j][i]?=?1;
            ?84???????????????}
            ?85???????????}
            ?86???????}
            ?87???????for?(k?=?0;k?<?n;k++)?{
            ?88???????????for?(i?=?0;i?<?n;i++)?{
            ?89???????????????for?(j?=?0;j?<?n;j++)?{
            ?90???????????????????g[i][j]?|=?g[i][k]?&?g[k][j];
            ?91???????????????}
            ?92???????????}
            ?93???????}
            ?94???????int?f?=?1;
            ?95???????for?(i?=?0;i?<?n;i++)?{
            ?96???????????f?+=?p[i].size();
            ?97???????????if?(!vis[i])?{
            ?98???????????????f?+=?1;
            ?99???????????????for?(j?=?0;j?<?n;j++)?{
            100???????????????????vis[j]?|=?g[i][j];
            101???????????????}
            102???????????}
            103???????}
            104???????f?-=?allpoint.size();
            105???????printf("%d\n",?f);
            106???}?
            107???return?0;
            108?}
            109?
            110?

            posted on 2010-07-08 22:06 schindlerlee 閱讀(1737) 評論(0)  編輯 收藏 引用 所屬分類: 解題報告

            日本精品久久久中文字幕| 久久99精品九九九久久婷婷| 99久久国产亚洲综合精品| 久久精品人人做人人爽97| 久久午夜综合久久| 91精品国产91久久久久福利| 尹人香蕉久久99天天拍| 四虎国产精品免费久久久| 看全色黄大色大片免费久久久| 亚洲色婷婷综合久久| 超级97碰碰碰碰久久久久最新| 久久精品人人槡人妻人人玩AV | 精品无码久久久久久久久久 | 久久国产精品99精品国产987| 久久久久免费精品国产| 中文国产成人精品久久亚洲精品AⅤ无码精品 | 国产精久久一区二区三区| 久久91综合国产91久久精品| 久久久久人妻一区精品果冻| A级毛片无码久久精品免费| 无码人妻久久一区二区三区蜜桃| 91久久精一区二区三区大全| 国产精品成人久久久| 久久99精品久久久久久野外| 99久久综合狠狠综合久久止| 国产aⅴ激情无码久久| 色狠狠久久综合网| 亚洲国产精品无码久久一线| 久久香蕉超碰97国产精品| 国产精品久久久久jk制服| 国产精品99久久99久久久| 99久久香蕉国产线看观香| 无码任你躁久久久久久老妇| 久久综合亚洲鲁鲁五月天| 久久国产精品二国产精品| 久久亚洲精品人成综合网| 无码专区久久综合久中文字幕| 区久久AAA片69亚洲| 久久久久久久97| 亚洲va久久久噜噜噜久久天堂| A级毛片无码久久精品免费|