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

            Uriel's Corner

            Research Associate @ Harvard University / Research Interests: Computer Vision, Biomedical Image Analysis, Machine Learning
            posts - 0, comments - 50, trackbacks - 0, articles - 594
                個(gè)人感覺2010年的題目比2009年的稍難... ...
                都說ACMer做這種復(fù)試題應(yīng)該秒殺... 結(jié)果我還是悲劇地各種WA... 代碼能力和細(xì)心程度都嚴(yán)重不足啊... ...
                貌似網(wǎng)上解題報(bào)告很多的樣子... 還是再貼下自己的吧, 供大家一起學(xué)習(xí)討論

            1. A+B
                一開始是三位三位一讀, 一個(gè)數(shù)讀完處理符號, WA三次
                后來改成直接兩個(gè)字符串全讀進(jìn)去再一位位處理就A了... 還是有點(diǎn)莫名
            //浙大計(jì)算機(jī)研究生復(fù)試上機(jī)考試-2010年  A+B
            #include<ctype.h>
            #include
            <stdio.h>
            #include
            <stdlib.h>
            #include
            <string.h>
            #define I __int64

            int main() {
                
            int i, a, b;
                
            char s1[20], s2[20];
                
            while (~scanf("%s %s", s1, s2)) {
                    a 
            = b = 0;
                    
            for (i = 0; s1[i]; ++i) {
                        
            if (!isdigit(s1[i]))
                            
            continue;
                        a 
            = a * 10 + s1[i] - '0';
                    }

                    
            if (s1[0== '-')
                        a 
            *= -1;
                    
            for (i = 0; s2[i]; ++i) {
                        
            if (!isdigit(s2[i]))
                            
            continue;
                        b 
            = b * 10 + s2[i] - '0';
                    }

                    
            if (s2[0== '-')
                        b 
            *= -1;
                    printf(
            "%d\n", a + b);
                }

                
            return 0;
            }


            2. ZOJ問題
                水題, 一開始最后的地方?jīng)]有判'&& n2 > 0', WA一次
                題目就是要求滿足(n1 * n2 == n3 && n2 > 0) 再加上一個(gè)z一個(gè)j, z在j前面
             
            //浙大計(jì)算機(jī)研究生復(fù)試上機(jī)考試-2010年  ZOJ問題
            #include<stdio.h>
            #include
            <stdlib.h>
            #include
            <string.h>

            char s[1010];

            int main() {
                
            int i, j;
                
            int nj, nz, n1, n2, n3; //句中j的個(gè)數(shù); z的個(gè)數(shù); z左邊o的個(gè)數(shù); zj之間o的個(gè)數(shù); j右邊o的個(gè)數(shù) 
                bool ok, f;
                
            while (~scanf("%s", s)) {
                    
            if (!strcmp(s, "zoj")) {
                        puts(
            "Accepted");
                        
            continue;
                    }

                    f 
            = false;
                    ok 
            = true;
                    nj 
            = nz = 0;
                    
            for (i = 0; s[i]; ++i) {
                        
            if (s[i] == 'j'{
                            nj
            ++;
                            f 
            = true;
                        }
             else if (s[i] == 'z'{
                            nz
            ++;
                            
            if (f) {
                                ok 
            = false;
                                
            break;
                            }

                        }

                    }

                    
            if (nj != 1 || nz != 1)
                        ok 
            = false;
                    
            if (ok) {
                        n1 
            = n2 = n3 = 0;
                        
            for (i = 0; s[i] != 'z'++i)
                            n1
            ++;
                        
            ++i;
                        
            for (; s[i] != 'j'++i)
                            n2
            ++;
                        
            ++i;
                        
            for (; s[i]; ++i)
                            n3
            ++;
                        
            if (n1 * n2 == n3 && n2 > 0)
                            ;
                        
            else
                            ok 
            = false;
                    }

                    
            if (ok)
                        puts(
            "Accepted");
                    
            else
                        puts(
            "Wrong Answer");
                }

                
            return 0;
            }


            3. 奧運(yùn)排序問題
                水題, 直接sort就行, 一開始理解錯(cuò)題意了, WA得半死, 網(wǎng)上搜了解題報(bào)告才發(fā)現(xiàn)最后只有那m個(gè)國家參與排序... = =
                代碼改得又長又挫... ...
            //浙大計(jì)算機(jī)研究生復(fù)試上機(jī)考試-2010年  奧運(yùn)排序問題
            #include<stdio.h>
            #include
            <stdlib.h>
            #include
            <string.h>
            #include
            <algorithm>
            using namespace std;

            struct M {
                
            int ng, nm, id, rk, ans;
                
            double np, pp;
            }
            p[100100], q[100100];

            int n, m, id[100100], a[100100];

            bool cmp1(M a, M b) {
                
            return a.ng > b.ng;
            }


            bool cmp2(M a, M b) {
                
            return a.nm > b.nm;
            }


            bool cmp3(M a, M b) {
                
            return a.np > b.np;
            }


            bool cmp4(M a, M b) {
                
            return a.pp > b.pp;
            }


            int main() {
                
            int i, s, x;
                
            while(~scanf("%d %d"&n, &m)) {
                    
            for(i = 0; i < n; ++i) {
                        scanf(
            "%d %d %d"&p[i].ng, &p[i].nm, &s);
                        p[i].np 
            = 1.0 * p[i].ng/(1.0 * s);
                        p[i].pp 
            = 1.0 * p[i].nm/(1.0 * s);
                        p[i].rk 
            = n + 1;
                        p[i].id 
            = i;
                    }

                    
            for(i = 0; i < m; ++i) {
                        scanf(
            "%d"&a[i]);
                        q[i] 
            = p[a[i]];
                    }

                    
            for(i = 0; i < m; ++i) p[i] = q[i];
                    sort(p, p 
            + m, cmp1);
                    
            int rank = 1, pos = 0;
                    
            for(i = 0; i < m; ++i) {
                        
            if(p[i].ng == p[pos].ng) {
                            
            if(p[i].rk > rank) {
                                p[i].rk 
            = rank;
                                p[i].ans 
            = 1;
                            }

                        }

                        
            else{
                            pos 
            = i;
                            rank 
            = pos + 1;
                            
            if(p[i].rk > rank) {
                                p[i].rk 
            = rank;
                                p[i].ans 
            = 1;
                            }

                        }

                    }

                    sort(p, p 
            + m, cmp2);
                    rank 
            = 1, pos = 0;
                    
            for(i = 0; i < m; ++i) {
                        
            if(p[i].nm == p[pos].nm) {
                            
            if(p[i].rk > rank) {
                                p[i].rk 
            = rank;
                                p[i].ans 
            = 2;
                            }

                        }

                        
            else{
                            pos 
            = i;
                            rank 
            = pos + 1;
                            
            if(p[i].rk > rank) {
                                p[i].rk 
            = rank;
                                p[i].ans 
            = 2;
                            }

                        }

                    }

                    sort(p, p 
            + m, cmp3);
                    rank 
            = 1, pos = 0;
                    
            for(i = 0; i < m; ++i) {
                        
            if(p[i].np == p[pos].np) {
                            
            if(p[i].rk > rank) {
                                p[i].rk 
            = rank;
                                p[i].ans 
            = 3;
                            }

                        }

                        
            else{
                            pos 
            = i;
                            rank 
            = pos + 1;
                            
            if(p[i].rk > rank) {
                                p[i].rk 
            = rank;
                                p[i].ans 
            = 3;
                            }

                        }

                    }

                    sort(p, p 
            + m, cmp4);
                    rank 
            = 1, pos = 0;
                    
            for(i = 0; i < m; ++i) {
                        
            if(p[i].pp == p[pos].pp) {
                            
            if(p[i].rk > rank) {
                                p[i].rk 
            = rank;
                                p[i].ans 
            = 4;
                            }

                        }

                        
            else{
                            pos 
            = i;
                            rank 
            = pos + 1;
                            
            if(p[i].rk > rank) {
                                p[i].rk 
            = rank;
                                p[i].ans 
            = 4;
                            }

                        }

                    }

                    
            for(i = 0; i < m; ++i){
                        id[p[i].id] 
            = i;
                    }

                    
            for(i = 0; i < m; ++i) {
                        printf(
            "%d:%d\n", p[id[a[i]]].rk, p[id[a[i]]].ans);
                    }

                    puts(
            "");
                }

                
            return 0;
            }


            4. 最短路徑問題
                無向圖最短路問題, 每條路同時(shí)還有個(gè)費(fèi)用值, 當(dāng)有相同長度的最短路時(shí)選擇總費(fèi)用最小的
                Dijkstra算法稍加改動就行, 這題的trick是有重邊, WA了兩次搜了解題報(bào)告才反應(yīng)過來, 這種trick在ACM題里應(yīng)該都不算是什么trick了, 就算沒有也應(yīng)該考慮到... 實(shí)在是不應(yīng)該... ...
            //浙大計(jì)算機(jī)研究生復(fù)試上機(jī)考試-2010年  最短路徑問題
            #include<stdio.h>
            #include
            <stdlib.h>
            #include
            <string.h>
            #define N 1010
            #define INF 0x3f3f3f3f

            int dis[N], cost[N], n, m, len[N][N], val[N][N];

            void dij(int v, int a[][N], int b[][N]) {
                
            int i, j;
                
            bool s[N];
                
            for(i = 1; i <= n; ++i) {
                    dis[i] 
            = a[v][i];
                    cost[i] 
            = b[v][i];
                    s[i] 
            = false;
                }

                dis[v] 
            = 0;
                cost[v] 
            = 0;
                s[v] 
            = true;
                
            for(i = 1; i < n; ++i) {
                    
            int tp = INF, u = v, cst = INF;
                    
            for(j = 1; j <= n; ++j) {
                        
            if(!s[j] && (dis[j] < tp || (dis[j] == tp && cost[j] < cst))) {
                            u 
            = j;
                            tp 
            = dis[j];
                            cst 
            = cost[j];
                        }

                    }

                    s[u] 
            = true;
                    
            for(j = 1; j <= n ;++j) {
                        
            if(!s[j] && (a[u][j] < INF)) {
                            
            int newdis = dis[u] + a[u][j];
                            cst 
            = cost[u] + b[u][j];
                            
            if(newdis < dis[j] || (newdis == dis[j] && cst < cost[j])) {
                                dis[j] 
            = newdis;
                                cost[j] 
            = cst;
                            }

                        }

                    }

                }

                
            return;
            }


            int main() {
                
            int i, j, a, b, d, p, s, t;
                
            while(scanf("%d %d"&n, &m), n | m) {
                    
            for(i = 1; i <= n; ++i) {
                        
            for(j = 1; j <= n; ++j) {
                            val[i][j] 
            = val[j][i] = INF;
                            len[i][j] 
            = len[j][i] = INF;
                        }

                        val[i][i] 
            = len[i][i] = 0;
                    }

                    
            for(i = 0; i < m; ++i) {
                        scanf(
            "%d %d %d %d"&a, &b, &d, &p);
                        
            if(len[a][b] > d) {
                            len[a][b] 
            = len[b][a] = d;
                            val[a][b] 
            = val[b][a] = p;
                        }

                    }

                    scanf(
            "%d %d"&s, &t);
                    dij(s, len, val);
                    printf(
            "%d %d\n", dis[t], cost[t]);
                }

                
            return 0;
            }

            2011.09.10 PS: 九度上上述代碼WA... 判重邊那里要改一下...
            int main() {
                
            int i, j, a, b, d, p, s, t;
                
            while(scanf("%d %d"&n, &m), n | m) {
                    
            for(i = 1; i <= n; ++i) {
                        
            for(j = 1; j <= n; ++j) {
                            val[i][j] 
            = val[j][i] = INF;
                            len[i][j] 
            = len[j][i] = INF;
                        }

                        val[i][i] 
            = len[i][i] = 0;
                    }

                    
            for(i = 0; i < m; ++i) {
                        scanf(
            "%d %d %d %d"&a, &b, &d, &p);
                        
            if(len[a][b] >= d) {
                            len[a][b] 
            = len[b][a] = d;
                            
            if(val[a][b] > p)val[a][b] = val[b][a] = p;
                        }

                    }

                    scanf(
            "%d %d"&s, &t);
                    dij(s, len, val);
                    printf(
            "%d %d\n", dis[t], cost[t]);
                }

                
            return 0;
            }


            5. 二叉搜索樹
                唉... 復(fù)旦省賽就掛在BST上, 做這題大水BST還WA兩次... ...最后比較每個(gè)結(jié)點(diǎn)的時(shí)候忘記比較根結(jié)點(diǎn)了...@_@
                我的方法是先建樹, 然后模板樹和待匹配樹同時(shí)BFS, 遇到不同的結(jié)點(diǎn)馬上返回-1, 表示生成的兩棵BST不同, 數(shù)組下標(biāo)弄得很惡心, 自己查了半天...
                后來看了下, 網(wǎng)上很多大牛都是建樹之后做先序遍歷和后序遍歷, 因?yàn)檫@樣兩次遍歷之后就能唯一確定一棵樹, 代碼比我的方法的好看
                2011.09.01 PS: 先序遍歷和后序遍歷不是不能唯一確定一棵二叉樹的么。。
                                       看到一位大牛的方法不錯(cuò)http://www.pyoung.net/?p=954, 照這個(gè)方法又做了一遍, 直接用數(shù)組存最后strcmp就行, 很方便~
                                       見第二份代碼
            方法一: 我的挫方法
            //浙大計(jì)算機(jī)研究生復(fù)試上機(jī)考試-2010年 二叉搜索樹
            #include<stdio.h>
            #include
            <stdlib.h>
            #include
            <string.h>

            struct node{
                
            int id, l, r;
            }
            p[2][30];

            int n, np[2], que[2][1000];
            char s[15];

            void init(int tr) {
                
            int i;
                
            for(i = 0; i < 30++i) {
                    p[tr][i].l 
            = p[tr][i].r = -1;
                }

            }


            void insert(int tr, int t, int x, int id) {
                
            if(x > p[tr][t].id) {
                    
            if(p[tr][t].r == -1{
                        p[tr][t].r 
            = id;
                        p[tr][id].id 
            = x;
                        p[tr][id].l 
            = p[tr][id].r = -1;
                    }

                    
            else
                        insert(tr, p[tr][t].r, x, id);
                }

                
            else {
                    
            if(p[tr][t].l == -1{
                        p[tr][t].l 
            = id;
                        p[tr][id].id 
            = x;
                        p[tr][id].l 
            = p[tr][id].r = -1;
                    }

                    
            else
                        insert(tr, p[tr][t].l, x, id);
                }

            }


            int BFS() {
                
            int l = 0, r = 1;
                que[
            0][0= que[1][0= 0;
                
            while(l < r) {
                    
            if(~p[0][que[0][l]].l && p[1][que[1][l]].l == -1return -1;
                    
            if(p[0][que[0][l]].l == -1 && ~p[1][que[1][l]].l) return -1;
                    
            if(~p[0][que[0][l]].r && p[1][que[1][l]].r == -1return -1;
                    
            if(p[0][que[0][l]].r == -1 && ~p[1][que[1][l]].r) return -1;
                    
            if(~p[0][que[0][l]].l) {
                        
            if(p[1][p[1][que[1][l]].l].id != p[0][p[0][que[0][l]].l].id) return -1;
                        que[
            1][r] = p[1][que[1][l]].l;
                        que[
            0][r] = p[0][que[0][l]].l;
                        
            ++r;
                    }

                    
            if(~p[0][que[0][l]].r) {
                        
            if(p[1][p[1][que[1][l]].r].id != p[0][p[0][que[0][l]].r].id) return -1;
                        que[
            1][r] = p[1][que[1][l]].r;
                        que[
            0][r] = p[0][que[0][l]].r;
                        
            ++r;
                    }

                    
            ++l;
                }

                
            return 0;
            }


            int main() {
                
            int i;
                
            while(scanf("%d"&n), n) {
                    scanf(
            "%s", s);
                    init(
            0);
                    np[
            0= np[1= strlen(s);
                    p[
            0][0].id = s[0- '0';
                    p[
            0][0].l =p[0][0].r = -1;
                    
            for(i = 1; s[i]; ++i) {
                        insert(
            00, s[i] - '0', i);
                    }

                    
            while(n--{
                        scanf(
            "%s", s);
                        init(
            1);
                        p[
            1][0].id = s[0- '0';
                        p[
            1][0].l =p[1][0].r = -1;
                        
            for(i = 1; s[i]; ++i) {
                            insert(
            10, s[i] - '0', i);
                        }

                        
            if(~BFS()) puts("YES");
                        
            else
                            puts(
            "NO");
                    }

                }

                
            return 0;
            }


            方法二:
            //2010年浙江大學(xué)計(jì)算機(jī)及軟件工程研究生機(jī)試題 二叉搜索樹

            #include
            <stdio.h>
            #include
            <stdlib.h>
            #include
            <string.h>
            #define N 
            2050

            int n;
            char s1[N], s2[N];

            void insert(char *s, char c, int t) {
                
            if(s[t] == ' ') s[t] = c;
                
            else {
                    
            if(s[t] > c) insert(s, c, 2 * t);
                    
            else
                        insert(s, c, 
            2 * t + 1);
                }

            }


            int main() {
                
            int i;
                
            char s[30];
                
            while(scanf("%d"&n), n) {
                    memset(s1, 
            ' ', sizeof(s1));
                    scanf(
            "%s", s);
                    
            for(i = 0; s[i]; ++i) {
                        insert(s1, s[i], 
            1);
                    }

                    
            while(n--{
                        memset(s2, 
            ' ', sizeof(s2));
                        scanf(
            "%s", s);
                        
            for(i = 0; s[i]; ++i) {
                            insert(s2, s[i], 
            1);
                        }

                        
            if(strcmp(s1, s2)) puts("NO");
                        
            else
                            puts(
            "YES");
                    }

                }

                
            return 0;
            }
            久久亚洲AV无码精品色午夜| 99久久精品费精品国产一区二区| 国产精品99久久精品| 久久久噜噜噜久久中文福利| 久久综合色区| 久久精品国产乱子伦| 久久婷婷五月综合成人D啪| 久久青青色综合| 亚洲AV日韩AV永久无码久久| 久久久国产亚洲精品| 亚洲国产一成人久久精品| 色妞色综合久久夜夜 | 色综合久久无码五十路人妻| 国产精品中文久久久久久久| 伊人 久久 精品| A狠狠久久蜜臀婷色中文网| 91久久国产视频| 久久亚洲精品成人无码网站| 国产美女亚洲精品久久久综合| 中文字幕乱码人妻无码久久| 狠狠色综合网站久久久久久久高清 | 国产精品成人久久久| 三上悠亚久久精品| 久久九色综合九色99伊人| 国产69精品久久久久观看软件 | 国产69精品久久久久9999| 亚洲精品WWW久久久久久 | 香蕉久久影院| 久久777国产线看观看精品| 精品久久久久一区二区三区| 久久久久九九精品影院| 久久亚洲精精品中文字幕| 国产精品内射久久久久欢欢| 久久综合狠狠综合久久97色| 99久久做夜夜爱天天做精品| 性欧美大战久久久久久久久| 久久er99热精品一区二区| 久久精品国产亚洲Aⅴ香蕉| 日韩人妻无码精品久久久不卡 | 四虎国产精品免费久久5151| 久久国产热这里只有精品|