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

            糯米

            TI DaVinci, gstreamer, ffmpeg
            隨筆 - 167, 文章 - 0, 評論 - 47, 引用 - 0
            數據加載中……

            POJ 1048 Follow My Logic 有意思的題

            這題很有意思哇。給出一個這樣的東西:
            A---+
                |   
                +---:\
                    : >o---:\
                +---:/     : )---?
                |      C--o:/
            B---+

            其中:
                    :\               :\                 -:\                 -o:\                       A-o:\
                    : )              : >                 : )-                 : )o-                       : )o-?
                    :/               :/                 -:/                 --:/                       B--:/
               
                 AND gate          OR gate       Gate with inputs    An inverted top input          Two logic input
                                                                     and an inverted output         and the output


            然后叫你分析它的輸出。
            其實哥比較喜歡這種有創意的題,做這種題代碼也寫得比較有意思。


            #include <stdio.h>
            #include 
            <string.h>

            struct node {
                
            char type, n[3];
                
            struct node *child[2];
            }
            ;
            struct node nodes[128], *root;
            int nodes_cnt;
            char map[128][128], input[32];
            int W[128], H;

            int in_range(int dx, int dy)
            {
                
            return !(dx < 0 || dx >= W[dy] || dy < 0 || dy >= H);
            }


            void follow_path(int x, int y, struct node **p_node);

            int find_node(int x, int y, struct node **p_node)
            {
                
            struct node *t;

                
            if (map[y][x] >= 'A' && map[y][x] <= 'Z'{
                    t 
            = &nodes[nodes_cnt++];
                    t
            ->type = map[y][x];
                    
            *p_node = t;
                    
            return 1;
                }

                
            if (map[y][x] == 'o')
                    x
            --;
                
            if (map[y][x] == ')' || map[y][x] == '>'{
                    t 
            = &nodes[nodes_cnt++];
                    memset(t, 
            0sizeof(*t));
                    t
            ->type = map[y][x];
                    
            *p_node = t;
                    
            if (in_range(x - 3, y - 1&& map[y - 1][x - 3== 'o')
                        t
            ->n[0= 1;
                    
            if (in_range(x - 3, y + 1&& map[y + 1][x - 3== 'o')
                        t
            ->n[1= 1;
                    
            if (in_range(x + 1, y) && map[y][x + 1== 'o')
                        t
            ->n[2= 1;
                    follow_path(x 
            - 3, y - 1&t->child[0]);
                    follow_path(x 
            - 3, y + 1&t->child[1]);
                    
            return 1;
                }


                
            return 0;
            }


            void follow_path(int x, int y, struct node **p_node)
            {
                
            int i, dx, dy;
                
            const struct {
                    
            char ch;
                    
            int dx, dy;
                }
             dir[4= {
                    
            {'-'-10},
                    
            {'-'10},
                    
            {'|'01},
                    
            {'|'0-1}
                }
            ;

                
            while (1{
                    
            for (i = 0; i < 4; i++{
                        dx 
            = x + dir[i].dx;
                        dy 
            = y + dir[i].dy;
                        
            if (!in_range(dx, dy))
                            
            continue;
                        
            if (map[dy][dx] == dir[i].ch || map[dy][dx] == '+')
                            
            break;
                        
            if (find_node(dx, dy, p_node))
                            
            return ;
                    }

                    
            if (i == 4)
                        
            break;
                    map[y][x] 
            = '.';
                    x 
            = dx;
                    y 
            = dy;
                }


                
            *p_node = NULL;
            }


            int calc(struct node *t)
            {
                
            if (!t)
                    
            return 0;
                
            if (t->type >= 'A' && t->type <= 'Z')
                    
            return input[t->type - 'A'- '0';
                
            if (t->type == ')'
                    
            return ((calc(t->child[0]) ^ t->n[0]) & 
                            (calc(t
            ->child[1]) ^ t->n[1])) ^
                           t
            ->n[2];
                
            if (t->type == '>')
                    
            return ((calc(t->child[0]) ^ t->n[0]) | 
                            (calc(t
            ->child[1]) ^ t->n[1])) ^
                           t
            ->n[2];
                
            return 0;
            }


            void find_root()
            {
                
            int x, y;

                root 
            = NULL;
                
            for (y = 0; y < H; y++
                
            for (x = 0; x < W[y]; x++{
                    
            if (map[y][x] == '?'{
                        follow_path(x, y, 
            &root);
                        
            return ;
                    }

                }

            }


            int main()
            {

                freopen(
            "e:\\test\\in.txt""r", stdin);

                
            while (1{
                    nodes_cnt 
            = 0;
                    H 
            = 0;
                    
            while (1{
                        
            if (!fgets(map[H], sizeof(map[H]), stdin))
                            
            return 0;
                        
            if (map[H][0== '*')
                            
            break;
                        W[H] 
            = strlen(map[H]);
                        H
            ++;
                    }

                    find_root();
                    
            while (1{
                        fgets(input, 
            sizeof(input), stdin);
                        
            if (input[0== '*')
                            
            break;
                        printf(
            "%d\n", calc(root));
                    }

                    printf(
            "\n");
                }


                
            return 0;
            }

            posted on 2010-02-13 02:11 糯米 閱讀(580) 評論(0)  編輯 收藏 引用 所屬分類: POJ

            99久久成人国产精品免费| 久久99精品久久久久久不卡| 99久久国产综合精品网成人影院| 精品蜜臀久久久久99网站| 久久久久久久尹人综合网亚洲 | 久久精品国产免费| 国产精品久久久久久久久鸭 | 99久久精品国产综合一区| 久久99精品国产一区二区三区| 久久精品国产免费观看三人同眠| 久久精品视频一| 色狠狠久久AV五月综合| 99久久免费国产精精品| 亚洲国产成人久久综合碰碰动漫3d | 久久www免费人成看国产片| 久久综合一区二区无码| 中文字幕精品久久久久人妻| 亚洲精品乱码久久久久久中文字幕 | 精品综合久久久久久98| 婷婷久久综合| 欧洲成人午夜精品无码区久久 | 久久中文精品无码中文字幕| 亚洲精品97久久中文字幕无码| 久久精品中文騷妇女内射| 精品久久国产一区二区三区香蕉| 久久婷婷成人综合色综合| 久久综合狠狠综合久久97色| 国产精品美女久久久| 99久久国产宗和精品1上映| 久久精品国产亚洲Aⅴ香蕉| 97r久久精品国产99国产精| 伊人久久综合精品无码AV专区| 久久精品国产第一区二区| 精品久久人人爽天天玩人人妻| 国产精品久久久天天影视| 久久天堂AV综合合色蜜桃网 | 精品久久久久久久国产潘金莲 | 久久99精品国产| 久久精品国产99国产精品澳门| 狠狠色丁香久久婷婷综| 久久综合久久综合久久|