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

            oyjpArt ACM/ICPC算法程序設(shè)計(jì)空間

            // I am new in programming, welcome to my blog
            I am oyjpart(alpc12, 四城)
            posts - 224, comments - 694, trackbacks - 0, articles - 6

            奶牛題比賽

            Posted on 2007-07-21 23:19 oyjpart 閱讀(3714) 評(píng)論(4)  編輯 收藏 引用 所屬分類: ACM/ICPC或其他比賽

            放假啦

            3272 Problem A Cow Traffic  

            由于題目是TOPO有序圖 直接DP一次拿到每個(gè)點(diǎn)的到達(dá)路徑條數(shù) dp[i]

            然后將所有有向邊反向 再做一次DP即得從BARN到每個(gè)點(diǎn)的路徑條數(shù) rdp[i]

            枚舉所有邊(u,v) 記錄dp[u] * rdp[i]的最大值即可


            3273 Problem B Monthly Expense

            二分枚舉答案

            3274 Problem C Gold Balanced Lineup

            HASH來做 我用排序做超時(shí)了.. Hash AC
            由于中間把Node的大小定義operator<()中最后一行寫成了return true 一直拿不到正確答案... 原來自己定義map元素大小的時(shí)候相等情況應(yīng)該定義為false 我的理解是屬于大于等于的范疇
            Code follows:

             1#include <iostream>
             2#include <map>
             3#include <vector>
             4using namespace std;
             5
             6struct Node { int s[30]; };
             7
             8const int N = 100010;
             9int n, K;
            10Node a[N];
            11map<Node, int> mym;
            12vector<int> l[N];
            13
            14bool operator<(const Node& a, const Node& b) {
            15 int i;
            16 for(i = 0; i < K; ++i) 
            17  if(a.s[i] != b.s[i])
            18   return a.s[i] < b.s[i];
            19 return false;
            20}
            21
            22int main() {
            23 scanf("%d %d", &n, &K);
            24 int i, t, j, k;
            25 for(j = 0; j < K; ++j)
            26  a[0].s[j] = 0;
            27 for(i = 1; i <= n; ++i) {
            28  scanf("%d", &t);
            29  for(j = 0; j < K; ++j, t >>= 1)
            30   a[i].s[j] = a[i-1].s[j] + (t % 2);
            31  for(j = 1; j < K; ++j)
            32   a[i].s[j] -= a[i].s[0];
            33  a[i].s[0] = 0;
            34 }
            35
            36  j = 0;
            37 for(i = 0; i <= n; ++i) {
            38  if(mym.find(a[i]) == mym.end()) 
            39   mym[a[i]] = j++;
            40  l[mym[a[i]]].push_back(i);
            41 }
            42
            43 int res = 0;
            44 for(i = 0; i < j; ++i) {
            45  int min = 123456789, max = -1;
            46  for(k = 0; k < l[i].size(); ++k) {
            47   if(l[i][k] > max) max = l[i][k];
            48   if(l[i][k] < min) min = l[i][k];
            49  }
            50  if(max - min > res) res = max - min;
            51 }
            52
            53 printf("%d\n", res);
            54
            55 return 0;
            56}
            57



            3275 Problem D Ranking the Cows 

            首先可以看出詢問的上界是所有的不連通的節(jié)點(diǎn)數(shù) 因?yàn)橹灰縬uery一次就可以全部得到順序

            然后我們可以證明其下界也是這個(gè) 因?yàn)槭聦?shí)上只要這兩個(gè)節(jié)點(diǎn)在大小序列中相鄰 那么他們必須被詢問一次

            所以我們只要做DFS就可以找出不連通的節(jié)點(diǎn)對(duì)數(shù)

            3277 Problem F City Horizon

            首先對(duì)Y方向做離散化(注意不要用map 容易超時(shí)-_-||| 我就超了)

            接著構(gòu)建線段數(shù)(區(qū)間為0-Y方向點(diǎn)的個(gè)數(shù))

            然后從左到右掃描 每碰到一個(gè)矩形的左豎線就添加到線段數(shù) 右豎線則刪除 面積 += 掃描間距 * 線段數(shù)的測度

            3278 Problem G Catch That Cow

            BFS

            3279 Problem H Fliptile
            枚舉第一行狀態(tài)2^m
            可以遞推出下面所有行的狀態(tài)
            時(shí)間復(fù)雜度o(2^m * n)
            注意用位運(yùn)算壓縮

            3280 Cheapest Palindrome

            觀察可知 其實(shí)插入一個(gè)字符串在最優(yōu)插入情況下可以看作是刪除一個(gè)字符(想想為什么?)

            這樣就可以得到每個(gè)字符的刪除耗費(fèi)

            然后可以得到一個(gè)和LCS有些像的方程

            dp[i, j] = Min( dp[i+1, j] + cost[word[j]], dp[i, j-1] + cost[word[i]], dp[i+1, j-1]->(if(word[i] == word[j]));

            找出最開始的那個(gè)結(jié)論就可以了

            3281 Problem J Dining

            最大流

            從題目描述中比較容易看出網(wǎng)絡(luò)流可能出解 剩下的就是構(gòu)造圖

            我們看到對(duì)于一個(gè)Cow來說 其必須在滿足Food和Drink皆滿意的情況下才能算做滿意 因此比較好的構(gòu)圖方法是將Food和Drink分別與源點(diǎn)和匯點(diǎn)相連 將cow放在中間 并把點(diǎn)權(quán)換成邊權(quán)(即將每一個(gè)cow節(jié)點(diǎn)一分為2 將點(diǎn)權(quán)放到2點(diǎn)的連邊上) 所有權(quán)全部設(shè)成1 RUN一次最大流 這種圖有時(shí)候也叫做三分圖

            Feedback

            # re: 奶牛題比賽  回復(fù)  更多評(píng)論   

            2007-08-08 02:39 by 冰上極光
            學(xué)習(xí)了.....
            歡迎光臨我的博客啊.....
            http://hi.baidu.com/liguanbin
            有不少ACM的心得體會(huì)哦~~互相學(xué)習(xí)

            # re: 奶牛題比賽  回復(fù)  更多評(píng)論   

            2008-09-06 21:48 by sai90
            怎么個(gè)個(gè)都想的這么複雜?

            # re: 奶牛題比賽  回復(fù)  更多評(píng)論   

            2008-09-07 14:59 by oyjpart
            請(qǐng)教簡單的方法

            # re: 奶牛題比賽  回復(fù)  更多評(píng)論   

            2009-10-01 14:05 by 搜咯翻車魚
            3274,
            a[i].s[j] -= a[i].s[0];
            什么意思啊大牛?
            26uuu久久五月天| 久久精品国产亚洲av麻豆蜜芽 | 日韩美女18网站久久精品| 99久久精品免费观看国产| 日本加勒比久久精品| 亚洲婷婷国产精品电影人久久| 久久综合久久综合亚洲| 亚洲精品乱码久久久久久按摩 | 欧美色综合久久久久久| 亚洲精品乱码久久久久久按摩| 97精品伊人久久久大香线蕉| 亚洲精品tv久久久久久久久久| 久久人妻少妇嫩草AV无码专区 | 狠狠色丁香婷婷久久综合| 久久av无码专区亚洲av桃花岛| 久久久WWW免费人成精品| 久久久久久九九99精品| 中文字幕精品久久久久人妻| 亚洲国产精品久久久久婷婷软件 | 99热都是精品久久久久久| 伊人久久无码精品中文字幕| 久久综合狠狠综合久久激情 | 77777亚洲午夜久久多喷| 久久精品二区| 国产ww久久久久久久久久| 亚洲国产精品18久久久久久| 久久影院久久香蕉国产线看观看| 国产精品一久久香蕉产线看| 99久久精品免费看国产一区二区三区 | 久久99精品国产麻豆蜜芽| 国产成人久久AV免费| 亚洲愉拍99热成人精品热久久| 久久久久久A亚洲欧洲AV冫| 人人狠狠综合久久亚洲婷婷 | 久久亚洲视频| 国产999精品久久久久久| 国产精品热久久毛片| 亚洲午夜久久久久妓女影院| 伊人久久大香线蕉成人| 亚洲国产综合久久天堂| 欧美久久久久久|