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

            superman

            聚精會神搞建設(shè) 一心一意謀發(fā)展
            posts - 190, comments - 17, trackbacks - 0, articles - 0
               :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            ZOJ 1005 - Jugs

            Posted on 2008-03-12 18:53 superman 閱讀(659) 評論(0)  編輯 收藏 引用 所屬分類: ZOJ
              1 /* Accepted 1005 C++ 00:00.01 2836K */
              2 #include <stdio.h>
              3 #include <string.h>
              4 #include <iostream>
              5 
              6 using namespace std;
              7 
              8 int min(int a, int b)
              9 {
             10     return a < b ? a : b;
             11 }
             12 
             13 struct
             14 {
             15     int a, b, last, operation;
             16 }queue[65535];
             17 int front, rear;
             18 bool isRepeat[1001][1001];
             19 
             20 void outPut(int i)
             21 {
             22     if(i == 0)
             23         return;
             24     outPut(queue[i].last);
             25     switch(queue[i].operation)
             26     {
             27         case 1 : cout << "fill A"   << endl; break;
             28         case 2 : cout << "fill B"   << endl; break;
             29         case 3 : cout << "empty A"  << endl; break;
             30         case 4 : cout << "empty B"  << endl; break;
             31         case 5 : cout << "pour A B" << endl; break;
             32         case 6 : cout << "pour B A" << endl; break;
             33     }
             34 }
             35 
             36 int main()
             37 {
             38     //freopen("p1005.in", "r", stdin);
             39     
             40     int A, B, N;
             41     
             42     while(cin >> A >> B >> N)
             43     {
             44         memset(isRepeat, 0sizeof(isRepeat));
             45         front = -1, rear = 0;
             46         queue[0].a = queue[0].b = 0;
             47         queue[0].last = queue[0].operation = 0;
             48         while(front < rear)
             49         {
             50             front++;
             51             int a = queue[front].a;
             52             int b = queue[front].b;
             53             
             54             if(b == N)
             55             {
             56                 outPut(front);
             57                 cout << "success" << endl;
             58                 break;
             59             }
             60             
             61             //fill A
             62             if(a != A)
             63             {
             64                 rear++;
             65                 queue[rear].a = A;
             66                 queue[rear].b = b;
             67                 queue[rear].last = front;
             68                 queue[rear].operation = 1;
             69                 if(isRepeat[queue[rear].a][queue[rear].b])
             70                     rear--;
             71                 else
             72                     isRepeat[queue[rear].a][queue[rear].b] = true;
             73             }
             74             
             75             //fill B
             76             if(b != B)
             77             {
             78                 rear++;
             79                 queue[rear].a = a;
             80                 queue[rear].b = B;
             81                 queue[rear].last = front;
             82                 queue[rear].operation = 2;
             83                 if(isRepeat[queue[rear].a][queue[rear].b])
             84                     rear--;
             85                 else
             86                     isRepeat[queue[rear].a][queue[rear].b] = true;
             87             }
             88             
             89             //empty A
             90             if(a != 0)
             91             {
             92                 rear++;
             93                 queue[rear].a = 0;
             94                 queue[rear].b = b;
             95                 queue[rear].last = front;
             96                 queue[rear].operation = 3;
             97                 if(isRepeat[queue[rear].a][queue[rear].b])
             98                     rear--;
             99                 else
            100                     isRepeat[queue[rear].a][queue[rear].b] = true;
            101             }
            102             
            103             //empty B
            104             if(b != 0)
            105             {
            106                 rear++;
            107                 queue[rear].a = a;
            108                 queue[rear].b = 0;
            109                 queue[rear].last = front;
            110                 queue[rear].operation = 4;
            111                 if(isRepeat[queue[rear].a][queue[rear].b])
            112                     rear--;
            113                 else
            114                     isRepeat[queue[rear].a][queue[rear].b] = true;
            115             }
            116             
            117             //pour A to B
            118             rear++;
            119             queue[rear].a = a - min(a, B - b);
            120             queue[rear].b = b + min(a, B - b);
            121             queue[rear].last = front;
            122             queue[rear].operation = 5;
            123             if(isRepeat[queue[rear].a][queue[rear].b])
            124                 rear--;
            125             else
            126                 isRepeat[queue[rear].a][queue[rear].b] = true;
            127             
            128             //pour B to A
            129             rear++;
            130             queue[rear].a = a + min(b, A - a);
            131             queue[rear].b = b - min(b, A - a);
            132             queue[rear].last = front;
            133             queue[rear].operation = 6;
            134             if(isRepeat[queue[rear].a][queue[rear].b])
            135                 rear--;
            136             else
            137                 isRepeat[queue[rear].a][queue[rear].b] = true;
            138         }
            139     }
            140     
            141     return 0;
            142 }
            143 
            144 
            日本欧美国产精品第一页久久| 蜜桃麻豆www久久国产精品| 狠狠色婷婷久久一区二区| 狠狠色丁香久久婷婷综合_中| 久久久久国产精品人妻| 97久久久精品综合88久久| 久久99精品国产99久久6| 一本色道久久88精品综合 | 777午夜精品久久av蜜臀| 久久精品国产清高在天天线| 久久99亚洲综合精品首页| 亚洲色欲久久久综合网东京热| 久久91精品国产91久久小草| 午夜精品久久久久久影视777| 97久久精品无码一区二区| 亚洲精品午夜国产va久久| 亚洲国产成人久久综合一| 国产成人无码精品久久久性色| 久久夜色tv网站| 精品久久久久久无码专区| 一级女性全黄久久生活片免费| 久久成人影院精品777| 亚洲AV无码一区东京热久久| 久久久免费观成人影院 | 欧美亚洲日本久久精品| 久久伊人精品青青草原高清| 精品蜜臀久久久久99网站| 无码人妻久久一区二区三区蜜桃 | 久久中文字幕一区二区| 亚洲精品乱码久久久久66| 亚洲精品国产自在久久| 日韩亚洲国产综合久久久| 国产精品免费看久久久香蕉| 精品国产VA久久久久久久冰| 无码国内精品久久人妻蜜桃| 亚洲色大成网站WWW久久九九| 蜜臀久久99精品久久久久久| 国产巨作麻豆欧美亚洲综合久久| 国产国产成人久久精品| 亚洲国产精品久久久久婷婷软件| 国产精品美女久久久久网|