• <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>

            pku 2274 the race 數據結構好題,各種NC錯誤。。

            題意這樣的
            有N架飛船,給出他們的起始位置和速度(速度為正數),求
            (1)在比賽過程中它們會相遇多少次
            (2)輸出排名前10000次的相遇事件

            首先先畫畫s-v圖來看,如果按照s遞增的順序來添加直線,那么第i條直線與第j條直線(j<i)能相交的充要條件是vj>vi,這樣子就很簡單了,用任何一種樹結構維護前i條直線的v值,添加第i條直線時產生的相交個數就是vj>vi的直線條數。我是通過離散化+樹狀數組來做的,本想用set,沒想到iterator 不能相減求個數。。囧
            第二問做的時候各種NC錯誤,各種NC想法,耗費了大概6個小時。。無語。。
            其實就是多條線段求交點的掃描線法的變通。
            維護一個堆和Hash表(判重),我偷懶,直接用set
            里面存儲的是相鄰兩條直線相交的時刻,每次取出一次事件后更新下排名表和位置表,然后再將新產生的兩個相鄰的直線添加入set。
            NC錯誤一:為了消除浮點比較誤差,將分數通分移項,沒考慮乘法時已溢出int。。。
            NC錯誤二:更新排名表和位置表的時候,竟然十分詭異地用swap交換兩個排名表中的項。。。。應該是先交換位置表中的項,再更新排名表。解釋下,位置表就是你排第幾,排名表是排第幾的是誰
            細心啊細心。。。無語
            貼代碼
             1 # include <cstdio>
             2 # include <algorithm>
             3 # include <cstring>
             4 # include <set>
             5 # define N 250005
             6 using namespace std;
             7 # define lowbit(t) ((t)&-(t))
             8 struct node
             9 {
            10     int x,v,id;
            11 }data[N];
            12 int n;
            13 bool cmpv(const node &a,const node &b)
            14 {
            15     return a.v<b.v;
            16 }
            17 bool cmpx(const node &a,const node &b)
            18 {
            19     return a.x<b.x;
            20 }
            21 int arr[N],table[N],ranklist[N];
            22 void add(int pos)
            23 {
            24     while(pos<=n)
            25     {
            26         arr[pos]++;
            27         pos+=lowbit(pos);
            28     }
            29 }
            30 int sum(int pos)
            31 {
            32     int res=0;
            33     while(pos>0)
            34     {
            35         res+=arr[pos];
            36         pos-=lowbit(pos);
            37     }
            38     return res;
            39 }
            40 
            41 struct cmp
            42 {
            43     bool operator()(const pair<int,int> &a,const pair<int,int> &b) const
            44     {
            45         if(((long long)data[a.second].x-data[a.first].x)*(data[b.first].v-data[b.second].v)!=((long long)data[b.second].x-data[b.first].x)*(data[a.first].v-data[a.second].v))
            46             return ((long long)data[a.second].x-data[a.first].x)*(data[b.first].v-data[b.second].v)<((long long)data[b.second].x-data[b.first].x)*(data[a.first].v-data[a.second].v);
            47         else
            48             return ((long long)data[a.first].x*(data[a.first].v-data[a.second].v)+data[a.first].v*(data[a.second].x-data[a.first].x))*(data[b.first].v-data[b.second].v)<
            49                    ((long long)data[b.first].x*(data[b.first].v-data[b.second].v)+data[b.first].v*(data[b.second].x-data[b.first].x))*(data[a.first].v-data[a.second].v);
            50     }
            51 };
            52 set<pair<int,int>,cmp> q;
            53 int main()
            54 {
            55     scanf("%d",&n);
            56     for(int i=0;i<n;i++)
            57         scanf("%d%d",&data[i].x,&data[i].v);
            58     sort(data,data+n,cmpv);
            59     data[0].id=1;
            60     for(int i=1;i<n;i++)
            61         data[i].id=(data[i].v==data[i-1].v?data[i-1].id:data[i-1].id+1);
            62     sort(data,data+n,cmpx);
            63     memset(arr,0,sizeof(arr));
            64     int ans=0;
            65     for(int i=0;i<n;i++)
            66     {
            67         ans=(ans+i-sum(data[i].id))%1000000;
            68         add(data[i].id);
            69         ranklist[i]=table[i]=i;
            70     }
            71     printf("%d\n",ans);
            72     for(int i=1;i<n;i++)
            73         if(data[i].v<data[i-1].v)
            74             q.insert(make_pair<int,int>(i-1,i));
            75     for(int i=1;i<=10000&&!q.empty();i++)
            76     {
            77         pair<int,int> top=*q.begin();
            78         q.erase(q.begin());
            79         printf("%d %d\n",min(top.first,top.second)+1,max(top.first,top.second)+1);
            80         swap(table[top.first],table[top.second]);
            81         ranklist[table[top.first]]=top.first;
            82         ranklist[table[top.second]]=top.second;
            83         if(table[top.first]!=n-1&&data[top.first].x<data[ranklist[table[top.first]+1]].x&&data[top.first].v>data[ranklist[table[top.first]+1]].v&&cmp()(top,make_pair<int,int>(top.first,ranklist[table[top.first]+1])))
            84             q.insert(make_pair<int,int>(top.first,ranklist[table[top.first]+1]));
            85         if(table[top.second]!=0&&data[ranklist[table[top.second]-1]].x<data[top.second].x&&data[ranklist[table[top.second]-1]].v>data[top.second].v&&cmp()(top,make_pair<int,int>(ranklist[table[top.second]-1],top.second)))
            86             q.insert(make_pair<int,int>(ranklist[table[top.second]-1],top.second));
            87     }
            88     return 0;    
            89 }
            90 


            posted on 2010-11-04 12:38 yzhw 閱讀(233) 評論(0)  編輯 收藏 引用 所屬分類: data struct

            <2010年11月>
            31123456
            78910111213
            14151617181920
            21222324252627
            2829301234
            567891011

            導航

            統計

            公告

            統計系統

            留言簿(1)

            隨筆分類(227)

            文章分類(2)

            OJ

            最新隨筆

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            久久久久国产精品三级网| 99国产精品久久| 一级做a爰片久久毛片看看| 久久99精品久久久久久秒播| 999久久久无码国产精品| 久久久久久国产精品免费无码| 久久久久亚洲AV片无码下载蜜桃| 亚洲乱码日产精品a级毛片久久 | 亚洲国产精品高清久久久| 久久精品无码一区二区WWW| 伊人久久大香线蕉AV色婷婷色| 亚洲午夜无码久久久久| 国内精品久久人妻互换| 97久久久精品综合88久久| 97久久精品人人做人人爽| 久久精品免费大片国产大片| 伊人久久大香线蕉综合热线| 久久久久亚洲AV无码永不| 国产午夜精品理论片久久| 久久天天躁夜夜躁狠狠| 99精品伊人久久久大香线蕉| 久久天天躁夜夜躁狠狠躁2022| 久久精品亚洲精品国产色婷| 久久综合伊人77777麻豆| 久久国产精品一区二区| 久久无码高潮喷水| 久久99精品九九九久久婷婷| 久久精品国产亚洲AV高清热| 久久影院亚洲一区| 久久99精品久久久久久9蜜桃| 精品伊人久久大线蕉色首页| 久久丝袜精品中文字幕| 久久久精品日本一区二区三区| 国产精品久久久久9999高清| 精品人妻伦九区久久AAA片69| 综合久久精品色| 麻豆精品久久久久久久99蜜桃 | 精品久久久久久久| 99久久精品费精品国产一区二区| 亚洲AV无一区二区三区久久| 欧美黑人激情性久久|