• <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, 評(píng)論 - 47, 引用 - 0
            數(shù)據(jù)加載中……

            POJ 1478 Island of Logic 枚舉

            思路:
            由于數(shù)據(jù)量比較小,可以枚舉ABCDE的所有身份和時(shí)間(白天或者晚上),不會(huì)超時(shí)。
            判斷deducible、impossible的部分很難寫,基本上是照著數(shù)據(jù)改的。。
            1. 如果沒(méi)有任何狀態(tài)是符合要求的,輸出 impossible。
            2. 在符合要求的狀態(tài)中,如果對(duì)于某個(gè)人的身份或者時(shí)間,存在分歧,那該條就不能輸出。
            3. 在(2)的情況下,如果沒(méi)有任何輸出,就輸出 deducible。

            快被這玩意整瘋了。要是沒(méi)有數(shù)據(jù)肯定搞不出來(lái)。


            #include <stdio.h>

            #define MAX_N 6

            enum kind_t {
                NONE, 
                
                ROLE_START, 
                DIVINE 
            = ROLE_START, HUMAN, EVIL, 
                ROLE_END 
            = EVIL,
                ANY_ROLE,

                LYING, 
                
                TIME_START, 
                DAY 
            = TIME_START, 
                NIGHT, 
                TIME_END 
            = NIGHT,
                ANY_TIME
            }
            ;

            char *str_tbl[] = 
                
            "none"
                
            "divine""human""evil""any_role"
                
            "lying"
                
            "day""night""any_time"
            }
            ;

            struct node {
                
            int x, y, not, type;
            }
            ;
            struct node in[64];

            struct stat {
                
            int role[MAX_N], time;
            }
            ;
            struct stat ans, cur;

            int N;

            __inline 
            void input(struct node *t)
            {
                
            char a[32], b[32];

                scanf(
            "%s%s", a, b);
                t
            ->= a[0- 'A';
                
            if (b[0== 'I')
                    t
            ->= t->x;
                
            else
                    t
            ->= b[0- 'A';
                scanf(
            "%s%s", a, b);
                
            if (b[0== 'n' && b[1== 'o'{
                    t
            ->not = 1;
                    scanf(
            "%s", b);
                }
             else 
                    t
            ->not = 0;
                
            if (b[0== 'd')
                    t
            ->type = (b[1== 'a'? DAY : DIVINE;
                
            else if (b[0== 'h')
                    t
            ->type = HUMAN;
                
            else if (b[0== 'e')
                    t
            ->type = EVIL;
                
            else if (b[0== 'l')
                    t
            ->type = LYING;
                
            else 
                    t
            ->type = NIGHT;
            }


            __inline 
            int lies(int x)
            {
                
            return (cur.role[x] == EVIL) || (cur.role[x] == HUMAN && cur.time == NIGHT);
            }


            __inline 
            int check_one(struct node *t)
            {
                
            int right;

                
            if (t->type >= ROLE_START && t->type <= ROLE_END)
                    right 
            = t->not ^ (cur.role[t->y] == t->type);
                
            else if (t->type == LYING)
                    right 
            = t->not ^ lies(t->y);
                
            else {
                    
            if (t->type == DAY)
                        right 
            = (cur.time == DAY);
                    
            else
                        right 
            = (cur.time == NIGHT);
                }


                
            return lies(t->x) ? !right : right;
            }


            __inline 
            void check()
            {
                
            int i;

                
            for (i = 0; i < N; i++
                    
            if (!check_one(&in[i]))
                        
            return ;

                
            for (i = 0; i < MAX_N; i++{
                    
            if (ans.role[i] == NONE)
                        ans.role[i] 
            = cur.role[i];
                    
            else if (ans.role[i] != cur.role[i])
                        ans.role[i] 
            = ANY_ROLE;
                }

                
            if (ans.time == NONE)
                    ans.time 
            = cur.time;
                
            else if (ans.time != cur.time)
                    ans.time 
            = ANY_TIME;
            }


            __inline 
            void solve()
            {
                
            int i, mask, cnt, *arr[MAX_N];

                mask 
            = 0;
                
            for (i = 0; i < N; i++{
                    mask 
            |= 1 << in[i].x;
                    mask 
            |= 1 << in[i].y;
                }


                
            for (cnt = i = 0; i < MAX_N; i++{
                    
            if (mask & (1 << i)) {
                        arr[cnt
            ++= &cur.role[i];
                        cur.role[i] 
            = ROLE_START;
                    }
             else
                        cur.role[i] 
            = NONE;
                    ans.role[i] 
            = NONE;
                }

                ans.time 
            = NONE;

                
            while (1{
                    cur.time 
            = DAY;
                    check();
                    cur.time 
            = NIGHT;
                    check();
                    
            for (i = 0; i < cnt && *arr[i] == ROLE_END; i++)
                        
            *arr[i] = ROLE_START;
                    
            if (i == cnt)
                        
            break;
                    (
            *arr[i])++;
                }

            }


            __inline 
            void dump()
            {
                
            int i, cnt;

                
            for (i = 0; i < MAX_N && ans.role[i] == NONE; i++);
                
            if (i == MAX_N && ans.time == NONE) {
                    printf(
            "This is impossible.\n\n");
                    
            return ;
                }


                
            for (cnt = i = 0; i < MAX_N; i++{
                    
            if (ans.role[i] >= ROLE_START && ans.role[i] <= ROLE_END) {
                        cnt
            ++;
                        printf(
            "%c is %s.\n", i + 'A', str_tbl[ans.role[i]]);
                    }

                }
                
                
            if (ans.time >= TIME_START && ans.time <= TIME_END) {
                    printf(
            "It is %s.\n", str_tbl[ans.time]);
                    cnt
            ++;
                }


                
            if (!cnt) {
                    printf(
            "No facts are deducible.\n\n");
                    
            return ;
                }


                putchar(
            '\n');
            }


            int main()
            {
                
            int i, t;

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

                
            for (t = 1; scanf("%d"&N), N; t++{
                    
            for (i = 0; i < N; i++)
                        input(
            &in[i]);
                    printf(
            "Conversation #%d\n", t);
                    solve();
                    dump();
                }


                
            return 0;
            }

            posted on 2010-03-30 16:42 糯米 閱讀(541) 評(píng)論(0)  編輯 收藏 引用 所屬分類: POJ

            久久久亚洲欧洲日产国码是AV| 久久996热精品xxxx| 人人妻久久人人澡人人爽人人精品 | 久久婷婷久久一区二区三区| 国产成人精品免费久久久久| 国产精品美女久久久| 久久久久久久亚洲精品| 亚洲国产精品无码久久久秋霞2 | 色欲综合久久躁天天躁| 中文字幕人妻色偷偷久久| 国产精品久久毛片完整版| 久久这里只有精品首页| 成人精品一区二区久久| 久久亚洲私人国产精品| 色天使久久综合网天天| 国产精品欧美久久久天天影视| 一本久久a久久精品综合香蕉| 久久99精品久久久久久动态图| 亚洲天堂久久久| 狠狠色丁香婷婷综合久久来来去 | 国产精品一区二区久久| 久久亚洲sm情趣捆绑调教| 品成人欧美大片久久国产欧美... 品成人欧美大片久久国产欧美 | 尹人香蕉久久99天天拍| 91精品国产综合久久婷婷| 色青青草原桃花久久综合| 青青热久久综合网伊人| 久久AV高清无码| 国产午夜精品久久久久免费视| 亚洲精品蜜桃久久久久久| 婷婷久久五月天| 99精品国产免费久久久久久下载| 国产精品熟女福利久久AV| 99久久精品免费看国产一区二区三区| 无码日韩人妻精品久久蜜桃| 国内精品久久久久久久久电影网| 亚洲婷婷国产精品电影人久久| 亚洲人成无码网站久久99热国产| 亚洲伊人久久成综合人影院 | 久久九九全国免费| 一本久久a久久精品综合夜夜 |