查看: 1362|回復: 0
打印 上一主題 下一主題

[CF] MemSQL Start[c]UP 2.0 - Round 1 B. 4-point polyline

[複製鏈接]
  • TA的每日心情
    開心
    2015-4-12 10:09
  • 簽到天數: 137 天

    [LV.7]常住居民III

    142

    主題

    686

    帖子

    3559

    積分

    邁向天堂

    蘇多門

    Rank: 8Rank: 8

    積分
    3559

    新手達陣台南一中資訊社程式設計達人 - 2014

    跳轉到指定樓層
    樓主
    發表於 2014-7-29 21:59:25 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

    趕快加入我們來參與討論吧!

    您需要 登錄 才可以下載或查看,沒有帳號?加入我們

    x
    本帖最後由 domen111 於 2014-7-29 22:03 編輯

    http://codeforces.com/problemset/problem/452/B

    自己寫(競賽中+賽後)的時候想了一大堆做法,想東想西總是會有漏洞。
    後來上網查別人的作法,居然輕輕鬆鬆就暴力AC,我居然沒想到!!!
    (學上一篇jd3的文,用大字體)

    輕易AC的code:
    [C++] 純文本查看 復制代碼
    #include<iostream>
    #include<set>
    using namespace std;
    typedef pair<int,int> PII;
    int n,m;
    set<PII> ns;
    void add(int x,int y)
    {
            if(x>=0 && x<=n && y>=0 && y<=m)
                    ns.insert(make_pair(x,y));
    }
    inline double dis(PII a,PII b)
    {
            double x=a.first-b.first;
            double y=a.second-b.second;
            return x*x+y*y;
    }
    int main()
    {
            cin>>n>>m;
            
            //lower-left
            add(0,0);
            add(0,1);
            add(1,0);
            //lower-right
            add(n,0);
            add(n-1,0);
            add(n,1);
            //upper-left
            add(0,m);
            add(0,m-1);
            add(1,m);
            //upper-right
            add(n,m);
            add(n-1,m);
            add(n,m-1);
            
            //brute forces
            double best=0;
            PII p1,p2,p3,p4;
            set<PII>::iterator i1,i2,i3,i4;
            for(i1=ns.begin();i1!=ns.end();i1++)
                    for(i2=ns.begin();i2!=ns.end();i2++)
                            for(i3=ns.begin();i3!=ns.end();i3++)
                                    for(i4=ns.begin();i4!=ns.end();i4++)
                                    {
                                            if(i1==i2 || i1==i3 || i1==i4 || i2==i3 || i2==i4 || i3==i4)
                                                    continue;
                                            double len=dis(*i1,*i2)+dis(*i2,*i3)+dis(*i3,*i4);
                                            if(len>best)
                                            {
                                                    best=len;
                                                    p1=*i1;
                                                    p2=*i2;
                                                    p3=*i3;
                                                    p4=*i4;
                                            }
                                    }
            cout<<p1.first<<" "<<p1.second<<endl;
            cout<<p2.first<<" "<<p2.second<<endl;
            cout<<p3.first<<" "<<p3.second<<endl;
            cout<<p4.first<<" "<<p4.second<<endl;
    }

    評分

    參與人數 1金幣 +6 收起 理由
    Sylveon + 6 跟我想的一樣XD,各種n-1,m-1亂湊.

    查看全部評分

    蘇多門 domen111
    My Web: https://sites.google.com/site/domenprg/
    回復

    使用道具 檢舉

    您需要登錄後才可以回帖 登入 | 加入我們

    本版積分規則

    快速回覆 返回頂部 返回列表