• <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-06-11 19:44 oyjpart 閱讀(2884) 評論(13)  編輯 收藏 引用 所屬分類: ACM/ICPC或其他比賽
            POJ

            1715 Hexadecimal Numbers Accepted
            首先確定位數(shù) 比如N位數(shù)一共有(16-1) * C(15, N-1); 其中16-1代表第一位不能為0 然后從高位到低位一個一個數(shù)確定

            1716 Integer Intervals Accepted
            可以按照左端點(diǎn)排序(也可以按右端點(diǎn)排序) 比如按左端點(diǎn)排序 貪心向后選擇 然后將選擇的數(shù)存入一個數(shù)組中 下一線段只要檢查需要多少幾個數(shù)就可以了 在選擇之前可以預(yù)先把具有包含關(guān)系的線段去掉 排序之后用stack就可以實(shí)現(xiàn)了

            1717 Dominoes Accepted
            典型的狀態(tài)型DP

            1718 River Crossing Accepted
            初看起來和PKU的Traffic Light有些像 是否是Dijkstra的變形呢?稍作分析發(fā)現(xiàn)并非如此 因?yàn)椴荒芡T谀硞€位置去等待下一次行進(jìn) 這樣 無法做標(biāo)號的永久化 分析發(fā)現(xiàn)題目中1<=a,b(上下時間間隔)<=5 這樣給我們提供了一個契機(jī) 對于每個位置的變換周期都在2~10之間 因此所有位置的變換周期最大將會 = LCM(2,3,4,..9,10) 計(jì)算一下發(fā)現(xiàn)為2520 這樣我們就可以在這段時間內(nèi)做DP a[t][i]代表t時刻i地址是否可達(dá)

            1719 Shooting Contest Accepted
            建立二分圖 做最大匹配(行或列做X集合都可以 用行要方便一點(diǎn)) 如果匹配數(shù)達(dá)到行數(shù) 就滿足條件  此題另有貪心算法

            1720 SQUARES 不會做 幾何題

            1721 CARDS  Accepted
            我的想法是搜 但是看到師傅是找了一個循環(huán)節(jié) 并且循環(huán)長度不超過n 我試著0MS過了 不過沒有證明出來 可能要用置換群的理論 不過我是白癡

            1722 SUBTRACT Accepted
            如果題目描述改為在這些數(shù)中添加+-號 使表達(dá)式的值為T 則可以很好的用DP或Memoization解決 這個題目相當(dāng)于把上述的問題轉(zhuǎn)化為對表達(dá)式的+號加上括號 就變成了題目描述中的運(yùn)算 把所有括號內(nèi)的運(yùn)算先輸出 若剩余K個數(shù) 再輸出K-1個1

            1723 SOLDIERS Accepted
            欲做此題 先證明下列結(jié)論:把一個序列{x1,x2..Xn} 通過加減變化變成相同的數(shù)Xp 一定 Xp = x[n/2] 通過在坐標(biāo)軸上畫點(diǎn)可以看出Xp無論左移還是右移 必然導(dǎo)致變化數(shù)增加 于是此題的y坐標(biāo)方向既可以轉(zhuǎn)化成此類問題 對于X方向 首先可以對每個坐標(biāo)減去所在位置 也就轉(zhuǎn)化成了此類問題 這樣通過排序就能解決此題

            1724 ROADS Accepted
            這個題目和“雙調(diào)路徑"的做法有點(diǎn)類似 把每一個點(diǎn)拆成總Money = M個點(diǎn) 然后用優(yōu)先級隊(duì)列找最短路徑就可以了

            1725 BALL 好麻煩呀...

            1731 Orders Accepted
            深搜 可以先把輸入串排序 在搜索的時候碰到同樣字符的時候可以只深搜第一個 這樣可以去重


            1732 Phone numbers Accepted
            沒想到直接DP就過了 我覺得就是一個1維的DP  時間和空間應(yīng)該都沒問題
            dp[i]代表0->i的序列可以用字串組合的最小字串?dāng)?shù) 對每個i做n次轉(zhuǎn)移 n是單詞數(shù)

            1733 Parity game  Accepted
            請參考解題報告http://www.shnenglu.com/sicheng/archive/2007/06/25/26945.html

            1734 Sightseeing trip Accepted
            請參考解題報告http://www.shnenglu.com/sicheng/archive/2007/05/28/25027.html

            1735 A Game on the Chessboard Accepted
            雙向廣搜 60MS 注意用2進(jìn)制位壓縮存儲
            寫了我3K的代碼 不過有一半是復(fù)制粘貼的...

            1736 Block Town

            Feedback

            # re: 閑來切題 呵呵  回復(fù)  更多評論   

            2007-06-11 19:53 by FlyingBear
            ym牛人

            # re: 閑來切題 呵呵  回復(fù)  更多評論   

            2007-07-05 10:38 by owen
            keke 來仰慕一下~

            # re: 閑來切題 呵呵  回復(fù)  更多評論   

            2008-01-07 13:15 by rushhour
            能說一下那個1723號題中,你說對X方向上,對每個坐標(biāo)減去所在位置,是什么意思?

            # re: 閑來切題 呵呵  回復(fù)  更多評論   

            2008-01-07 17:53 by oyjpart
            貼下代碼,可能容易理解些~
            #include <algorithm>
            using namespace std;
            const int N = 10010;
            int x[N], y[N];

            int main() {
            //freopen("t.in", "r", stdin);
            int n, i;
            scanf("%d", &n);
            for(i = 0; i< n; i++)
            scanf("%d%d", &x[i], &y[i]);
            sort(x, x+n);
            sort(y, y+n);
            for(i = 0; i<n; i++)
            x[i] -= i;
            sort(x, x+n);
            int ans = 0;
            for(i = 0; i <n; i++)
            ans += abs(x[i] - x[n/2]) + abs(y[i] - y[n/2]);
            printf("%d\n", ans);
            return 0;
            }

            # re: 閑來切題 呵呵  回復(fù)  更多評論   

            2008-04-12 00:58 by 竹苑
            請問1718那道題目是不是:
            先對所有a+b求最大公約數(shù),得到最大時間t1。然后在這段時間內(nèi)做DP (a[t][i]代表t時刻i地址是否可達(dá)),每次檢查a[t-1][j](0<=i-5<=j<=i-1)是否可達(dá),有一個可達(dá)則a[t][i]可達(dá)。
            請賜教啊,WA了好多次了。。。

            # re: 閑來切題 呵呵  回復(fù)  更多評論   

            2008-04-16 13:16 by oyjpart
            你參考下源代碼吧,如果還WA,我們QQ說。 :)
            #include <stdio.h>
            #include <string.h>

            const int N = 1010;
            const int T = 2520;
            const int MAXINT = 123456789;
            int n;
            int u[N], d[N];
            bool dp[2][N];
            int gcd[11][11];

            int GCD(int a, int b) {
            if(a < b) return GCD(b, a);
            while(b != 0) {
            int t = b;
            b = a % b;
            a = t;
            }
            return a;
            }

            inline int LCM(int a, int b) {
            return a * b / GCD(a, b);
            }

            bool ok(int time, int i) {
            int t = time % (u[i] + d[i]);
            if(t == 0 || t > u[i]) return false;
            return true;
            }


            int main() {
            int ntc, i, t, j;
            scanf("%d", &ntc);
            while(ntc--) {
            scanf("%d", &n);
            int lcm = 1;
            u[0] = u[n+1] = MAXINT; d[0] = d[n+1] = 0;
            for(i = 1; i <= n; ++i) {
            scanf("%d %d", &u[i], &d[i]);
            lcm = LCM(lcm, u[i] + d[i]);
            }
            n += 2;
            memset(dp, false, sizeof(dp));
            dp[0][0] = 1;
            for(t = 1; t <= lcm; ++t) {
            int now = t % 2;
            memset(dp[now], false, sizeof(dp[now]));
            for(i = 0; i < n; ++i) if(ok(t, i)) {
            for(j = i-5; j <= i+5; j++) if(j >= 0 && j < n) {
            if(dp[!now][j]) { dp[now][i] = 1; break; }
            }
            }
            if(dp[now][n-1]) { printf("%d\n", t); break; }
            }
            if(t > lcm) printf("NO\n");
            }
            return 0;
            }

            # re: 閑來切題 呵呵  回復(fù)  更多評論   

            2008-04-20 14:24 by 竹苑
            呵呵,參考你的源碼,終于AC啦。
            原來沒有考慮過了橋墩可以跳回來的情況,所以條件改為
            (0<=i-5<=j<=i+5<=n)就過啦。

            # re: 閑來切題 呵呵  回復(fù)  更多評論   

            2008-06-23 20:49 by lihao102
            1724 roads 雙調(diào)路徑能說進(jìn)更詳細(xì)些嗎?

               我不是很明白,有講這方面的資料嗎?

                       謝謝了。。。。。。

            # re: 閑來切題 呵呵  回復(fù)  更多評論   

            2008-06-23 22:22 by oyjpart
            1724 roads的代碼:
            #include <iostream>
            #include <queue>
            #include <vector>
            using namespace std;

            const int N = 101;
            struct Node {int x, w, f; void set(int xx, int ww, int ff) {x = xx; w = ww; f = ff;} };
            vector<Node> adj[N][N];
            int money, nv, ne;

            bool operator<(const Node& a, const Node& b) { return a.w > b.w; }

            void solve() {
            int x, i, j, y;
            priority_queue<Node> pq;
            Node now, cur;
            now.set(0, 0, 0);
            pq.push(now);
            while(!pq.empty()) {
            cur = pq.top();
            pq.pop();
            x = cur.x;
            if(x == nv-1) {
            printf("%d\n", cur.w);
            return;
            }
            for(i = 0; i < nv; ++i) {
            for(j = 0; j < adj[x][i].size(); j++) if(cur.f + adj[x][i][j].f <= money) {
            y = adj[x][i][j].x;
            now.set(y, cur.w + adj[x][i][j].w, cur.f + adj[x][i][j].f);
            pq.push(now);
            }
            }
            }
            printf("-1\n");
            }

            int main() {
            int i, u, v, w, f;
            Node now;
            scanf("%d %d %d", &money, &nv, &ne);
            for(i = 0; i < ne; ++i) {
            scanf("%d %d %d %d", &u, &v, &w, &f);
            --u; --v;
            now.set(v, w, f);
            adj[u][v].push_back(now);
            }

            solve();

            return 0;
            }

            # re: 閑來切題 呵呵  回復(fù)  更多評論   

            2008-06-25 15:37 by lihao102
            能留個聯(lián)系方式嗎? 最近也在為ACM努力著。 有不懂的,希望你能幫我!

            謝謝了。。。

            # re: 閑來切題 呵呵  回復(fù)  更多評論   

            2008-06-26 11:22 by oyjpart
            Contact me via POJ mail : alpc12
            email(MSN also) : yescrystalblue@sina.com

            # re: 閑來切題 呵呵[未登錄]  回復(fù)  更多評論   

            2009-02-03 21:37 by gb18030
            暈。。。您一天能切多少題。。。

            # re: 閑來切題 呵呵  回復(fù)  更多評論   

            2009-02-04 10:03 by oyjpart
            額。。這個說不定啊。。除了比賽一般不超過5道啦。。
            久久精品午夜一区二区福利| 久久精品国产99久久丝袜| 国产精品一区二区久久| 国产激情久久久久影院老熟女免费| 久久久久久久97| 一本一道久久精品综合| 无码人妻少妇久久中文字幕 | 精品久久久久久无码国产| 久久se这里只有精品| 97久久超碰国产精品2021| 国产成人精品免费久久久久| 久久久国产打桩机| 国产精品久久久久久久久久影院 | 久久国产高清字幕中文| 久久线看观看精品香蕉国产| 久久夜色精品国产亚洲| 久久精品亚洲欧美日韩久久| 国产亚洲精午夜久久久久久| 欧美激情精品久久久久| 久久久久久A亚洲欧洲AV冫 | 久久久久免费看成人影片| 久久国产精品99精品国产| 久久国产乱子伦精品免费强| 丁香久久婷婷国产午夜视频| 伊色综合久久之综合久久| 亚洲色欲久久久综合网东京热| 国产91色综合久久免费| 久久无码AV中文出轨人妻| 五月丁香综合激情六月久久| 99久久精品这里只有精品| 伊人久久大香线蕉综合Av| 亚洲狠狠综合久久| 久久人人爽人人爽人人av东京热| 国产精品对白刺激久久久| 久久人人爽人人爽人人片AV麻豆 | 性高朝久久久久久久久久| 国产精品久久波多野结衣| 一本色综合久久| 美女写真久久影院| 久久无码人妻一区二区三区 | 东方aⅴ免费观看久久av|