• <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,第二種方法過全部數據用了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 閱讀(413) 評論(0)  編輯 收藏 引用 所屬分類: 題目分類:搜索
            久久亚洲AV成人无码国产| 久久人人爽人人爽人人片AV东京热| 亚洲伊人久久成综合人影院 | 午夜精品久久久久久久久| 99精品国产99久久久久久97| 久久精品国产亚洲77777| 99热热久久这里只有精品68| 久久青青色综合| 久久91精品国产91久久麻豆| 久久99精品久久久久久不卡| 久久香综合精品久久伊人| 99久久99久久| 精品一二三区久久aaa片| 99久久国产热无码精品免费久久久久 | 亚洲中文字幕久久精品无码APP| 99久久er这里只有精品18| 韩国三级中文字幕hd久久精品 | 久久综合给合久久狠狠狠97色| 国产精品女同一区二区久久| 亚洲精品乱码久久久久久蜜桃不卡| 色综合久久久久网| 久久人爽人人爽人人片AV | avtt天堂网久久精品| 亚洲欧美精品一区久久中文字幕| 久久精品国产亚洲一区二区| 亚洲午夜久久久久妓女影院 | 国内精品久久久久| 久久久久av无码免费网| 久久久久九九精品影院| 国产精品成人精品久久久| av无码久久久久不卡免费网站| 亚洲欧洲日产国码无码久久99| 亚洲国产精品无码久久九九| 99热成人精品免费久久| 91久久香蕉国产熟女线看| 精品久久久久久国产| 国产精品欧美久久久天天影视| 久久精品中文无码资源站| 久久成人国产精品| 久久九九亚洲精品| 国产精品九九久久精品女同亚洲欧美日韩综合区 |