• <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
                發(fā)指啊... 第一次快寫完了結(jié)果傲游掛了... ...直接全部重來啊... ...OMG
                   
                這套比2005年的稍難, 不過基本都是小模擬啦, 對ACM菜鳥來說都是大水題~~

            1. 還是A+B
                注意題目第三個case, 8的前面全當(dāng)成0, 所以108和8的前兩位看作相同的
                我的方法很WS, 因為題目說不超過8位, 就先把不足8位的數(shù)字串補(bǔ)足8位, 高位全填0, 然后從后面開始比較k位就ok了~
            //浙大計算機(jī)研究生復(fù)試上機(jī)考試-2006年 還是A+B
            #include<stdio.h>
            #include
            <stdlib.h>
            #include
            <string.h>

            int k, s1, s2, l1, l2;
            char a[10], b[10];

            int cal(char *s) {
                
            int i, t = 0;
                
            for(i = 0; s[i]; ++i) t = t * 10 + s[i] - '0';
                
            return t;
            }


            int main() {
                
            int i;
                
            while(1{
                    scanf(
            "%s %s %d", a, b, &k);
                    
            if(!strcmp(a, "0"&& !strcmp(b, "0")) break;
                    l1 
            = strlen(a); l2 = strlen(b);
                    
            for(i = 7; i > 7 - l1; --i) a[i] = a[l1 + i - 8];
                    
            for(i = 0; i <= 7 - l1; ++i) a[i] = '0';
                    
            for(i = 7; i > 7 - l2; --i) b[i] = b[l2 + i - 8];
                    
            for(i = 0; i <= 7 - l2; ++i) b[i] = '0';
                    
            if(!strncmp(a + 8 - k,b + 8 - k, k)) {
                        puts(
            "-1");
                        
            continue;
                    }

                    s1 
            = cal(a); s2 = cal(b);
                    printf(
            "%d\n", s1 + s2);
                }

                
            return 0;
            }


            2. 火星A+B
                一開始理解錯題意了, 不過應(yīng)該不會有人跟我有一樣NC的理解吧... = = ...就不說了
                有點(diǎn)像高精度加法, 一位位加就好了, 注意進(jìn)制, 先打出100以內(nèi)的質(zhì)數(shù)表(保險起見多打了兩個)
                開始一處初始化忘了, WA三次才發(fā)現(xiàn)... ...
                PS: Discuss驚現(xiàn)ECUST-SJTU---ssjia大牛, 各種Orz
                2011.09.17 PS: 這題九度上死活過不了啊... 求交流
            //浙大計算機(jī)研究生復(fù)試上機(jī)考試-2006年 火星A+B
            #include<ctype.h>
            #include
            <stdio.h>
            #include
            <stdlib.h>
            #include
            <string.h>
            #include
            <algorithm>
                
            using namespace std;

            int bas[] = {2357111317192329313741434753596167717379838997101103};
            int a[30], b[30], c[30], l1, l2;
            char s1[300], s2[300];

            int main() {
                
            int i, tn1, tn2, tp;
                
            while(1{
                    scanf(
            "%s %s", s1, s2);
                    
            if(!strcmp(s1, "0"&& !strcmp(s2, "0")) break;
                    l1 
            = strlen(s1);
                    l2 
            = strlen(s2);
                    memset(a, 
            0sizeof(a));
                    memset(b, 
            0sizeof(b));
                    memset(c, 
            0sizeof(c));
                    tn1 
            = tn2 = 0; tp = 1;
                    
            for(i = l1 - 1; i >= 0--i) {
                        
            if(s1[i] == ','{
                            tn1
            ++;
                            tp 
            = 1;
                        }

                        
            else if(isdigit(s1[i])) {
                            a[tn1] 
            = a[tn1] + tp * (s1[i] - '0');
                            tp 
            *= 10;
                        }

                    }

                    tp 
            = 1;
                    
            for(i = l2 - 1; i >= 0--i) {
                        
            if(s2[i] == ','{
                            tn2
            ++;
                            tp 
            = 1;
                        }

                        
            else if(isdigit(s2[i])) {
                            b[tn2] 
            = b[tn2] + tp * (s2[i] - '0');
                            tp 
            *= 10;
                        }

                    }

                    
            int cf = 0;
                    
            for(i = 0; i <= min(tn1, tn2); ++i) {
                        c[i] 
            = cf + a[i] + b[i];
                        
            if(c[i] >= bas[i]) {
                            cf 
            = c[i] / bas[i];
                            c[i] 
            %= bas[i];
                        }

                        
            else
                            cf 
            = 0;
                    }

                    
            for(;i <= max(tn1, tn2); ++i) {
                        
            if(i <= tn1) {
                            c[i] 
            = cf + a[i];
                            
            if(c[i] >= bas[i]) {
                                cf 
            = c[i] / bas[i];
                                c[i] 
            %= bas[i];
                            }

                            
            else
                                cf 
            = 0;
                        }

                        
            else if(i <= tn2) {
                            c[i] 
            = cf + b[i];
                            
            if(c[i] >= bas[i]) {
                                cf 
            = c[i] / bas[i];
                                c[i] 
            %= bas[i];
                            }

                            
            else
                                cf 
            = 0;
                        }

                    }

                    c[i] 
            += cf;
                    
            if(c[i] >= bas[i]) {
                        cf 
            = c[i] / bas[i];
                        c[i] 
            %= bas[i];
                    }

                    
            else
                        cf 
            = 0;
                    
            if(cf) c[++i] = cf;
                    
            while(c[i] == 0 && i > 0--i;
                    
            for(; i > 0--i) printf("%d,", c[i]);
                    printf(
            "%d\n", c[0]);
                }

                
            return 0;
            }


            3. 還是暢通工程
                模板題, 不解釋

            //浙大計算機(jī)研究生復(fù)試上機(jī)考試-2006年 還是暢通工程
            #include<stdio.h>
            #include
            <stdlib.h>
            #include
            <string.h>
            #define N 110
            #define INF 0x3f3f3f3f

            int n, adj[N][N], lowcost[N], closest[N];

            void prim(int c[][N]) {
                
            bool s[N];
                s[
            1= true;
                
            for(int i = 2; i <= n; ++i) {
                    lowcost[i] 
            = c[1][i];
                    closest[i] 
            = 1;
                    s[i] 
            = false;
                }

                
            for(int i = 1; i < n; ++i) {
                    
            int mix = INF, j = 1;
                    
            for(int k = 2; k <= n; ++k)
                        
            if(lowcost[k] < mix && !s[k]) {
                            mix 
            = lowcost[k];
                            j 
            = k;
                        }

                        s[j] 
            = true;
                        
            for(int k = 2; k <= n; ++k)
                            
            if(c[j][k] < lowcost[k] && !s[k]) {
                                lowcost[k] 
            = c[j][k];
                                closest[k] 
            = j;
                            }

                }

            }


            int main() {
                
            int i, j, ans, a, b, c;
                
            while(scanf("%d"&n), n) {
                    
            for(i = 1; i <= n * (n - 1/ 2++i) {
                        scanf(
            "%d %d %d"&a, &b, &c);
                        adj[a][b] 
            = adj[b][a] = c;
                    }

                    prim(adj);
                    ans 
            = 0;
                    
            for(i = 1; i <= n; ++i) ans += lowcost[i];
                    printf(
            "%d\n", ans);
                }

                
            return 0;
            }



            4. 統(tǒng)計同成績學(xué)生人數(shù)
                大水題, 不解釋

            //浙大計算機(jī)研究生復(fù)試上機(jī)考試-2006年 統(tǒng)計同成績學(xué)生人數(shù)
            #include<stdio.h>
            #include
            <stdlib.h>
            #include
            <string.h>
            #define N 1010

            int a[N], n, ans;

            int main() {
                
            int x, i;
                
            while(scanf("%d"&n), n) {
                    
            for(i = 0; i < n; ++i) scanf("%d"&a[i]);
                    scanf(
            "%d"&x);
                    ans 
            = 0;
                    
            for(i = 0; i < n; ++i)
                        
            if(a[i] == x) ans++;
                    printf(
            "%d\n", ans);
                }

                
            return 0;
            }



            5. 簡單計算器
                我的方法比較麻煩... ...設(shè)置兩個棧(偷懶用了STL, 慢就慢吧...||), 一個符號棧, 一個操作數(shù)棧
                當(dāng)讀進(jìn)操作數(shù)時, 若符號棧棧頂為*或/, 就馬上計算掉, 彈出操作數(shù)棧棧頂連續(xù)兩個元素和符號棧棧頂, 算好之后結(jié)果壓進(jìn)操作數(shù)棧, 這里注意下運(yùn)算順序, '-','/'都是有計算順序要求的
                當(dāng)讀到運(yùn)算符時, 什么都不管, 直接壓進(jìn)符號棧
                最后把操作數(shù)棧和符號棧元素全部倒置(稍微想想就知道為什么了, 一開始這里沒想清楚, 單步了好一會兒才發(fā)現(xiàn)... ...), 然后不斷彈出符號棧棧頂符號和操作數(shù)棧頂連續(xù)兩個操作數(shù), 計算完后結(jié)果壓入操作數(shù)棧, 直至符號棧為空.

            //浙大計算機(jī)研究生復(fù)試上機(jī)考試-2006年 簡單計算器
            #include<stack>
            #include
            <ctype.h>
            #include
            <stdio.h>
            #include
            <stdlib.h>
            #include
            <string.h>
            using namespace std;

            double cal(double a, double b, char c) {
                
            if(c == '+'return a + b;
                
            if(c == '-'return a - b;
                
            if(c == '*'return a * b;
                
            if(c == '/'return a / b;
            }


            int main() {
                
            int i;
                
            char op[210];
                
            while(gets(op), strcmp(op, "0"!= 0{
                    i 
            = 0;
                    stack
            <double> opa;
                    stack
            <char> opr;
                    
            while(op[i]) {
                        
            if(isdigit(op[i])) {
                            
            double tp = 0.0;
                            
            while(isdigit(op[i])) {
                                tp 
            = tp * 10 + op[i] - '0';
                                
            ++i;
                            }

                            opa.push(tp);
                            
            if(!opr.empty() && opr.top() == '*'{
                                opr.pop();
                                
            double t1 = opa.top(); opa.pop();
                                
            double t2 = opa.top(); opa.pop();
                                opa.push(cal(t2, t1, 
            '*'));
                            }

                            
            else if(!opr.empty() && opr.top() == '/'{
                                opr.pop();
                                
            double t1 = opa.top(); opa.pop();
                                
            double t2 = opa.top(); opa.pop();
                                opa.push(cal(t2, t1, 
            '/'));
                            }

                        }

                        
            else if(op[i] == '+'{
                            opr.push(
            '+');
                            
            ++i;
                        }

                        
            else if(op[i] == '-'{
                            opr.push(
            '-');
                            
            ++i;
                        }

                        
            else if(op[i] == '*'{
                            opr.push(
            '*');
                            
            ++i;
                        }

                        
            else if(op[i] == '/'{
                            opr.push(
            '/');
                            
            ++i;
                        }

                        
            else
                            
            ++i;
                    }

                    stack
            <char>opr1;
                    stack
            <double>opa1;
                    
            while(!opr.empty()) {
                        opr1.push(opr.top());
                        opr.pop();
                    }

                    
            while(!opa.empty()) {
                        opa1.push(opa.top());
                        opa.pop();
                    }

                    
            while(!opr1.empty()) {
                        
            double t1 = opa1.top(); opa1.pop();
                        
            double t2 = opa1.top(); opa1.pop();
                        opa1.push(cal(t1, t2, opr1.top()));
                        opr1.pop();
                    }

                    printf(
            "%.2lf\n", opa1.top());
                }

                
            return 0;
            }


            2011.09.10 PS: 這題又用了另一種方法做
                 遇到數(shù)字的時候不處理, 直接壓入操作數(shù)棧, 遇到'*'或'/'時, 操作符棧頂連續(xù)的'*'或'/'都計算掉, 再將自己壓入操作符棧, 遇到'+'或'-'時, 操作符棧里的都能計算掉, 計算完后再將自己壓入操作符棧, 最后將操作符棧從棧頂依次處理即可, 因為此時不會出現(xiàn)多個'+''-', '*''/'相連導(dǎo)致運(yùn)算順序錯誤的情況
                 本來以為這樣很方便, 結(jié)果代碼比原來長了快一倍... (因為寫得挫... )
                 其實(shí)像書上那樣加入結(jié)束字符再處理的話代碼應(yīng)該會短一些... 有空再敲一次

            //2006年浙江大學(xué)計算機(jī)及軟件工程研究生機(jī)試題 簡單計算器
            #include<ctype.h>
            #include
            <stack>
            #include
            <stdio.h>
            #include
            <stdlib.h>
            #include
            <string.h>
            using namespace std;

            double cal(double a, double b, char c) {
                
            if(c == '+'return a + b;
                
            if(c == '-'return a - b;
                
            if(c == '*'return a * b;
                
            if(c == '/'return a / b;
            }


            int main() {
                
            int i;
                
            char op[220];
                
            while(gets(op), strcmp(op, "0")) {
                    i 
            = 0;
                    stack
            <double> opa;
                    stack
            <char> opr;
                    
            while(op[i]) {
                        
            if(isdigit(op[i])) {
                            
            double tp = 0.0;
                            
            while(isdigit(op[i])) {
                                tp 
            = tp * 10 + op[i] - '0';
                                
            ++i;
                            }

                            opa.push(tp);
                        }

                        
            else if(op[i] == '+'{
                            
            if(opr.empty()) opr.push('+');
                            
            else {
                                
            while(!opr.empty()) {
                                    
            if(opr.top() == '+'{
                                        
            double t1 = opa.top(); opa.pop();
                                        
            double t2 = opa.top(); opa.pop();
                                        opr.pop();
                                        opa.push(cal(t2, t1, 
            '+'));
                                    }

                                    
            else if(opr.top() == '-'{
                                        
            double t1 = opa.top(); opa.pop();
                                        
            double t2 = opa.top(); opa.pop();
                                        opa.push(cal(t2, t1, 
            '-'));
                                        opr.pop();
                                    }

                                    
            else if(opr.top() == '*'{
                                        
            double t1 = opa.top(); opa.pop();
                                        
            double t2 = opa.top(); opa.pop();
                                        opa.push(cal(t2, t1, 
            '*'));
                                        opr.pop();
                                    }

                                    
            else if(opr.top() == '/'{
                                        
            double t1 = opa.top(); opa.pop();
                                        
            double t2 = opa.top(); opa.pop();
                                        opa.push(cal(t2, t1, 
            '/'));
                                        opr.pop();
                                    }

                                }

                                opr.push(
            '+');
                            }

                            
            ++i;
                        }

                        
            else if(op[i] == '-'{
                            
            if(opr.empty()) opr.push('-');
                            
            else {
                                
            while(!opr.empty()) {
                                    
            if(opr.top() == '-'{
                                        
            double t1 = opa.top(); opa.pop();
                                        
            double t2 = opa.top(); opa.pop();
                                        opa.push(cal(t2, t1, 
            '-'));
                                        opr.pop();
                                    }

                                    
            else if(opr.top() == '+'{
                                        
            double t1 = opa.top(); opa.pop();
                                        
            double t2 = opa.top(); opa.pop();
                                        opa.push(cal(t2, t1, 
            '+'));
                                        opr.pop();
                                    }

                                    
            else if(opr.top() == '*'{
                                        
            double t1 = opa.top(); opa.pop();
                                        
            double t2 = opa.top(); opa.pop();
                                        opa.push(cal(t2, t1, 
            '*'));
                                        opr.pop();
                                    }

                                    
            else if(opr.top() == '/'{
                                        
            double t1 = opa.top(); opa.pop();
                                        
            double t2 = opa.top(); opa.pop();
                                        opa.push(cal(t2, t1, 
            '/'));
                                        opr.pop();
                                    }

                                }

                                opr.push(
            '-');
                            }

                            
            ++i;
                        }

                        
            else if(op[i] == '*'{
                            
            if(opr.empty()) opr.push('*');
                            
            else {
                                
            while(!opr.empty()) {
                                    
            if(opr.top() == '*'{
                                        
            double t1 = opa.top(); opa.pop();
                                        
            double t2 = opa.top(); opa.pop();
                                        opa.push(cal(t2, t1, 
            '*'));
                                        opr.pop();
                                    }

                                    
            else if(opr.top() == '/'{
                                        
            double t1 = opa.top(); opa.pop();
                                        
            double t2 = opa.top(); opa.pop();
                                        opa.push(cal(t2, t1, 
            '/'));
                                        opr.pop();
                                    }

                                    
            else
                                        
            break;
                                }

                                opr.push(
            '*');
                            }

                            
            ++i;
                        }

                        
            else if(op[i] == '/'{
                            
            if(opr.empty()) opr.push('/');
                            
            else {
                                
            while(!opr.empty()) {
                                    
            if(opr.top() == '/'{
                                        
            double t1 = opa.top(); opa.pop();
                                        
            double t2 = opa.top(); opa.pop();
                                        opa.push(cal(t2, t1, 
            '/'));
                                        opr.pop();
                                    }

                                    
            else if(opr.top() == '*'{
                                        
            double t1 = opa.top(); opa.pop();
                                        
            double t2 = opa.top(); opa.pop();
                                        opa.push(cal(t2, t1, 
            '*'));
                                        opr.pop();
                                    }

                                    
            else
                                        
            break;
                                }

                                opr.push(
            '/');
                            }

                            
            ++i;
                        }

                        
            else
                            
            ++i;
                    }

                    
            while(!opr.empty()) {
                        
            double t1 = opa.top(); opa.pop();
                        
            double t2 = opa.top(); opa.pop();
                        opa.push(cal(t2, t1, opr.top()));
                        opr.pop();
                    }

                    printf(
            "%.2lf\n", opa.top());
                }

                
            return 0;
            }


             

            Feedback

            # re: 浙大計算機(jī)研究生復(fù)試上機(jī)考試-2006年  回復(fù)  更多評論   

            2012-03-02 10:49 by
            最后把操作數(shù)棧和符號棧元素全部倒置(稍微想想就知道為什么了, 一開始這里沒想清楚, 單步了好一會兒才發(fā)現(xiàn)... ...),
            為什么???還是沒想明白,盼能解答

            # re: 浙大計算機(jī)研究生復(fù)試上機(jī)考試-2006年  回復(fù)  更多評論   

            2012-03-02 14:16 by Uriel
            @毛
            因為最后只剩加減法,加減法是從左到右依次計算,而在進(jìn)棧時是從左到右進(jìn)棧的,出棧順序與入棧相反,直接出棧一個計算一個的話就變成是從右到左計算了,所以倒置一下。。(不過這種做法很挫就是了。。= =)

            # re: 浙大計算機(jī)研究生復(fù)試上機(jī)考試-2006年  回復(fù)  更多評論   

            2012-03-02 14:26 by
            哦,想通了。一下子腦子短路了,好笨啊?。?!我也想的是這個方法,嘿嘿??擅看翁峤欢际荳A,看了帖子才知道錯在這了,謝謝~~~

            # re: 浙大計算機(jī)研究生復(fù)試上機(jī)考試-2006年  回復(fù)  更多評論   

            2012-03-02 14:30 by Uriel
            @毛
            表示我當(dāng)時debug了半天才發(fā)現(xiàn)。。= =
            感覺做題之前還是該拿筆算算,想想清楚。。
            久久99久久99精品免视看动漫| 国产精品久久久久久| 久久九九久精品国产免费直播| 综合久久一区二区三区 | 久久国产精品一区二区| 国产亚洲美女精品久久久久狼| 99久久免费国产精品| 久久男人AV资源网站| 久久国产精品无| 色诱久久久久综合网ywww| 国产精品久久99| 久久国产精品免费一区| 中文字幕无码久久久| 久久久精品国产免大香伊 | 久久精品国产福利国产琪琪| 久久久久久噜噜精品免费直播| 性做久久久久久久久老女人| 亚洲国产精品无码久久SM| 91精品国产9l久久久久| 国产毛片久久久久久国产毛片| 欧美与黑人午夜性猛交久久久| 精品无码久久久久国产动漫3d| 久久久久亚洲AV成人片| 国产精品gz久久久| 久久久久久久久久久精品尤物| 成人久久精品一区二区三区| 久久精品国产国产精品四凭| 亚洲中文字幕久久精品无码喷水 | 色综合久久无码中文字幕| 九九99精品久久久久久| 亚洲成av人片不卡无码久久| 国产V亚洲V天堂无码久久久| 色婷婷综合久久久久中文字幕| 精品国产一区二区三区久久久狼| 久久久久久久久久久免费精品| 无遮挡粉嫩小泬久久久久久久| 丁香久久婷婷国产午夜视频| 亚洲精品乱码久久久久久蜜桃图片 | 国产亚洲精品美女久久久| 99久久精品无码一区二区毛片| 久久天天躁狠狠躁夜夜2020老熟妇|