• <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>
            心如止水
            Je n'ai pas le temps
            posts - 400,comments - 130,trackbacks - 0
            題目大意:你需要制作一個Pizza,它能夠滿足所有人的至少一個要求。
            一開始一直在枚舉每一種材料是否被選擇,TLE。后來改變思路,枚舉每個人的需求:每個人可以什么都不選,可以選擇一個或者多個,使自己的需求得到滿足。盡管可以選擇多個,但選擇一個就夠了,不需要多選。
            第一種方法過樣例用了0.1s,第二種方法過全部數(shù)據(jù)用了0.18s。
            以下是我的代碼:
            //#define LOCAL

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

            #ifdef LOCAL
            #include
            <time.h>
            #endif
            const char End_Sign[]=".";
            const long maxn=108,kind=16;
            long num,inf[maxn][kind+1];
            char str[50];
            bool find,choose[kind+1],ans[kind+1];
            long h(char *s,long pos)
            {
                
            if(s[pos-1]=='+'return s[pos]-'A'+1;
                
            return -(s[pos]-'A'+1);
            }
            bool ok_one(long x)
            {
                
            for(long i=1;i<=kind;i++)
                  
            if((inf[x][i]==1&&choose[i])||(inf[x][i]==-1&&!choose[i]))
                    
            return true;
                
            return false;
            }
            void dfs(long dep)
            {
                
            if(find) return;
                
            if(dep>num)
                {
                   find
            =true;
                   
            for(long i=1;i<=kind;i++)
                     ans[i]
            =choose[i];
                   
            return;
                }
                
            if(ok_one(dep)) dfs(dep+1);
                
            for(long i=1;i<=kind&&!find;i++)
                {
                   
            if(inf[dep][i]==1&&!choose[i])
                   {
                      choose[i]
            =true;
                      dfs(dep
            +1);
                      choose[i]
            =false;
                   }
                }
            }
            int main()
            {
                #ifdef LOCAL
                freopen(
            "data.in","r",stdin);
                freopen(
            "data.out","w",stdout);
                
            #endif
                
            while(gets(str)!=0)
                {
                   num
            =0;
                   find
            =false;
                   
            for(long i=1;i<maxn;i++)
                     
            for(long j=1;j<=kind;j++)
                       inf[i][j]
            =0;
                   
            //  Clear
                   while(strcmp(str,End_Sign)!=0)
                   {
                      num
            ++;
                      
            long i=0,t;
                      
            while(str[i]!=';')
                      {
                         t
            =h(str,i+1);
                         
            if(t>0) inf[num][t]=1;
                         
            else inf[num][-t]=-1;
                         i
            +=2;
                      }
                      gets(str);
                   }
                   
            //  Read In and Init
                   
                   
            for(long i=1;i<=kind;i++) choose[i]=false;
                   dfs(
            1);
                   
            //  Dfs
                   if(find)
                   {
                      printf(
            "Toppings: ");
                      
            for(long i=1;i<=kind;i++)
                        
            if(ans[i])
                          printf(
            "%c",i+'A'-1);
                      putchar(
            '\n');
                   }
                   
            else printf("No pizza can satisfy these requests.\n");
                   
            //  Output
                }
                #ifdef LOCAL
                printf(
            "%.3lf\n",(double)clock()/CLOCKS_PER_SEC);
                
            #endif
            return 0;
            }


            posted on 2010-01-10 16:09 lee1r 閱讀(417) 評論(0)  編輯 收藏 引用 所屬分類: 題目分類:搜索
            久久精品国产亚洲av麻豆蜜芽| 久久91精品久久91综合| 伊人久久一区二区三区无码| 久久免费国产精品| 97精品依人久久久大香线蕉97| 午夜精品久久久久久毛片| 久久91综合国产91久久精品| 欧美成a人片免费看久久| 精品久久人妻av中文字幕| 精品国产综合区久久久久久| A级毛片无码久久精品免费 | 精品久久综合1区2区3区激情| 深夜久久AAAAA级毛片免费看| 久久香综合精品久久伊人| 国产免费久久精品99久久| 亚洲综合日韩久久成人AV| 久久青青草原精品国产软件| 欧美噜噜久久久XXX| 色天使久久综合网天天| 好属妞这里只有精品久久| 亚洲日韩中文无码久久| 日日狠狠久久偷偷色综合96蜜桃 | 亚洲精品tv久久久久久久久| 97久久精品人人澡人人爽| 日日噜噜夜夜狠狠久久丁香五月| 精品综合久久久久久88小说| 久久精品无码午夜福利理论片 | 中文成人无码精品久久久不卡 | 亚洲国产成人久久笫一页| 久久香蕉综合色一综合色88| 久久亚洲AV成人无码电影| 综合网日日天干夜夜久久| 性欧美大战久久久久久久| 久久免费香蕉视频| 人妻精品久久久久中文字幕| 国产成人综合久久精品尤物| 欧美精品一区二区精品久久| 久久成人国产精品二三区| 久久精品成人免费看| 亚洲国产精品久久久久婷婷老年| 91久久精品无码一区二区毛片|