• <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 糯米 閱讀(586) 評論(0)  編輯 收藏 引用 所屬分類: POJ

            亚洲va久久久噜噜噜久久狠狠| 日韩精品无码久久久久久| 2021久久精品国产99国产精品| 国内精品久久久人妻中文字幕| 免费精品99久久国产综合精品| 国内精品久久久久久不卡影院| 日本五月天婷久久网站| 国产精品久久久久久吹潮| 理论片午午伦夜理片久久| 精产国品久久一二三产区区别| 午夜精品久久久久久中宇| 久久精品无码一区二区三区日韩| 91麻豆国产精品91久久久| 国产成人精品久久综合| 一本一本久久a久久综合精品蜜桃| 国产一级持黄大片99久久| 欧美一区二区久久精品| 激情久久久久久久久久| 精品久久久久久成人AV| 狠狠色丁香久久婷婷综合蜜芽五月 | 久久久噜噜噜久久熟女AA片| 久久电影网2021| 亚洲午夜久久久久久噜噜噜| 欧美成a人片免费看久久| 人人狠狠综合久久亚洲88| 久久综合给合久久狠狠狠97色| 午夜精品久久久久成人| 久久亚洲精品中文字幕三区| 国产亚洲色婷婷久久99精品| 久久综合亚洲色一区二区三区| 亚洲国产高清精品线久久| 欧美精品一区二区久久| 国产午夜精品久久久久九九| 9191精品国产免费久久| 国产日产久久高清欧美一区| 精品久久久久久成人AV| 国产精品久久久久jk制服| 久久综合综合久久狠狠狠97色88| 久久精品国产亚洲77777| 国产一级持黄大片99久久| 久久婷婷久久一区二区三区|