青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

superman

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

ZOJ 1190 - Optimal Programs

Posted on 2008-05-19 15:53 superman 閱讀(458) 評論(0)  編輯 收藏 引用 所屬分類: ZOJ
  1 /* Accepted 1190 C++ 00:00.48 28620K */
  2 #include <iostream>
  3 
  4 using namespace std;
  5 
  6 enum { ADD = 1, DIV = 2, DUP = 3, MUL = 4, SUB = 5, maxStackSize = 11 };
  7 
  8 inline int abs(int n)
  9 {
 10     return n > 0 ? n : -n;
 11 }
 12 
 13 template <class T>
 14 class stack
 15 {
 16 public:
 17     T x[maxStackSize]; char p;
 18 
 19     stack() { p = -1; }
 20     int size() { return p + 1;}
 21     bool empty() { return p == -1; }
 22     void push(const T & item) { x[++p] = item; }
 23     void pop() { p--; }
 24     void clear() { p = -1; }
 25     T & top() { return x[p]; }
 26     
 27     void operator = (const stack & st)
 28     {
 29         memcpy(x, st.x, sizeof(st.x));
 30         p = st.p;
 31     }
 32 };
 33 
 34 struct QUEUE
 35 {
 36     int last;
 37     char cnt, op;
 38     stack <short> st;
 39 }queue[888888];
 40 
 41 string opSeq;
 42 int n, x[10], y[10];
 43 
 44 void getPath(int i)
 45 {
 46     if(queue[i].last)
 47         getPath(queue[i].last);
 48     opSeq += queue[i].op;
 49 }
 50 
 51 bool checkOthers()
 52 {
 53     for(int i = 1; i < n; i++)
 54     {
 55         stack <short> st;
 56         st.push(x[i]);
 57         int a, b;
 58         for(int k = 0; k < opSeq.size(); k++)
 59             switch(opSeq[k])
 60             {
 61                 case 1 : //ADD
 62                     a = st.top(); st.pop();
 63                     b = st.top(); st.pop();
 64                     if(abs(int(a) + int(b)) > 30000)
 65                         return false;
 66                     st.push(a + b);
 67                     break;
 68                 case 2 : //DIV
 69                     a = st.top(); st.pop();
 70                     b = st.top(); st.pop();
 71                     if(a == 0return false;
 72                     st.push(b / a);
 73                     break;
 74                 case 3 : //DUP
 75                     st.push(st.top()); break;
 76                 case 4 : //MUL
 77                     a = st.top(); st.pop();
 78                     b = st.top(); st.pop();
 79                     if(abs(int(a) * int(b)) > 30000)
 80                         return false;
 81                     st.push(a * b);
 82                     break;
 83                 case 5 : //SUB
 84                     a = st.top(); st.pop();
 85                     b = st.top(); st.pop();
 86                     if(abs(int(b) - int(a)) > 30000)
 87                         return false;
 88                     st.push(b - a);
 89                     break;
 90             }
 91         if(st.top() != y[i])
 92             return false;
 93     }
 94     return true;
 95 }
 96 
 97 int main()
 98 {
 99     int program = 0;
100     while((cin >> n) && n)
101     {
102         
103         for(int i = 0; i < n; i++)
104             cin >> x[i];
105         for(int i = 0; i < n; i++)
106             cin >> y[i];
107         
108         program++;
109         cout << "Program " << program << endl;
110         
111         bool empty_sequence = true;
112         for(int i = 0; i < n; i++)
113             if(x[i] != y[i])
114             {
115                 empty_sequence = falsebreak;
116             }
117         if(empty_sequence)
118         {
119             cout << "Empty sequence" << endl << endl; continue;
120         }
121         
122         int front = -1, rear = 0;
123         int best = INT_MAX; string bestSeq(10255);
124         bool found = false;
125         
126         queue[0].st.push(x[0]);
127         queue[0].last = 0;
128         queue[0].cnt = 0;
129         queue[0].op = 0;
130         while(front < rear)
131         {
132             front++;
133             
134             if(queue[front].cnt > best)
135                 continue;
136             
137             stack <short> st = queue[front].st;
138             
139             if(st.size() == 1 && st.top() == y[0])
140             {
141                 opSeq.clear();
142                 getPath(front);
143                 if(checkOthers())
144                 {
145                     if(queue[front].cnt == best)
146                         if(opSeq < bestSeq)
147                             bestSeq = opSeq;
148                     if(queue[front].cnt < best)
149                     {
150                         best = queue[front].cnt;
151                         bestSeq = opSeq;
152                     }
153                     found = true;
154                 }
155             }
156 
157             int a, b;
158             if(queue[front].cnt < 10)
159             {
160                 //ADD
161                 if(st.size() > 1)
162                 {
163                     rear++;
164                     queue[rear].st = st;
165                     queue[rear].op = ADD;
166                     queue[rear].cnt = queue[front].cnt + 1;
167                     queue[rear].last = front;
168                     a = queue[rear].st.top(); queue[rear].st.pop();
169                     b = queue[rear].st.top(); queue[rear].st.pop();
170                     queue[rear].st.push(a + b);
171                     if(abs(int(a) + int(b)) > 30000)
172                         rear--;
173                 }
174                 
175                 //DIV
176                 if(st.size() > 1 && st.top() != 0)
177                 {
178                     rear++;
179                     queue[rear].st = st;
180                     queue[rear].op = DIV;
181                     queue[rear].cnt = queue[front].cnt + 1;
182                     queue[rear].last = front;
183                     a = queue[rear].st.top(); queue[rear].st.pop();
184                     b = queue[rear].st.top(); queue[rear].st.pop();
185                     queue[rear].st.push(b / a);
186                 }
187                 
188                 //DUP
189                 rear++;
190                 queue[rear].st = st;
191                 queue[rear].op = DUP;
192                 queue[rear].cnt = queue[front].cnt + 1;
193                 queue[rear].last = front;
194                 queue[rear].st.push(st.top());
195                 
196                 //MUL
197                 if(st.size() > 1)
198                 {
199                     rear++;
200                     queue[rear].st = st;
201                     queue[rear].op = MUL;
202                     queue[rear].cnt = queue[front].cnt + 1;
203                     queue[rear].last = front;
204                     a = queue[rear].st.top(); queue[rear].st.pop();
205                     b = queue[rear].st.top(); queue[rear].st.pop();
206                     queue[rear].st.push(a * b);
207                     if(abs(int(a) * int(b)) > 30000)
208                         rear--;
209                 }
210                 
211                 //SUB
212                 if(st.size() > 1)
213                 {
214                     rear++;
215                     queue[rear].st = st;
216                     queue[rear].op = SUB;
217                     queue[rear].cnt = queue[front].cnt + 1;
218                     queue[rear].last = front;
219                     a = queue[rear].st.top(); queue[rear].st.pop();
220                     b = queue[rear].st.top(); queue[rear].st.pop();
221                     queue[rear].st.push(b - a);
222                     if(abs(int(b) - int(a)) > 30000)
223                         rear--;
224                 }
225             }
226         }
227 
228         if(found == false)
229             cout << "Impossible" << endl;
230         else
231             for(int i = 0; i < bestSeq.size(); i++)
232             {
233                 switch(bestSeq[i])
234                 {
235                     case 1 : cout << "ADD"break;
236                     case 2 : cout << "DIV"break;
237                     case 3 : cout << "DUP"break;
238                     case 4 : cout << "MUL"break;
239                     case 5 : cout << "SUB"break;
240                 }
241                 cout << (i == bestSeq.size() - 1 ? '\n'' ');
242             }
243         cout << endl;
244         
245         for(int i = 0; i <= rear; i++)
246             queue[i].st.clear();
247     }
248     
249     return 0;
250 }
251 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美精品国产一区| 亚洲国产网站| 国产亚洲成年网址在线观看| 欧美精品v日韩精品v韩国精品v | 亚洲精品视频在线播放| 91久久国产综合久久| 亚洲国产婷婷| 亚洲乱码国产乱码精品精天堂| 亚洲国产精品久久久久秋霞影院| 亚洲第一狼人社区| 夜夜躁日日躁狠狠久久88av| 亚洲专区一二三| 久久麻豆一区二区| 亚洲黄色性网站| 亚洲综合电影| 麻豆精品精华液| 欧美乱大交xxxxx| 国产精品亚洲一区二区三区在线| 国产一区二区精品丝袜| 91久久久久久久久| 香蕉久久夜色精品| 牛牛精品成人免费视频| 欧美韩国日本一区| 久久精品国产视频| 亚洲午夜在线| 久久精品视频免费| 欧美日韩黄色大片| 加勒比av一区二区| 亚洲天堂成人在线观看| 免费视频最近日韩| 亚洲午夜在线观看| 欧美黄色小视频| 红桃视频成人| 性娇小13――14欧美| 亚洲韩国一区二区三区| 欧美在线视频导航| 欧美视频国产精品| 亚洲精品日韩欧美| 久久午夜电影| 亚洲欧美日韩一区二区在线 | 久久精品导航| 日韩一级不卡| 猛男gaygay欧美视频| 国产一区二区中文字幕免费看| 一区二区三区视频在线观看 | 亚洲一区久久久| 欧美激情一区二区三区蜜桃视频 | 国模精品一区二区三区色天香| 中文一区二区| 亚洲激情第一页| 老司机午夜精品视频在线观看| 国产欧美另类| 欧美在线视频免费播放| 亚洲一级黄色片| 国产精品久久久久久久久久妞妞 | 欧美日韩国产一区二区| 亚洲精品国产精品乱码不99按摩| 久久综合久久综合这里只有精品| 亚洲欧美日韩系列| 国产午夜精品理论片a级探花| 亚洲欧美国产不卡| 亚洲一区久久久| 国产欧美一区二区视频| 久久国产婷婷国产香蕉| 欧美一区亚洲一区| 在线国产亚洲欧美| 欧美国产一区二区| 久久视频在线看| 91久久精品日日躁夜夜躁欧美| 欧美激情网友自拍| 欧美精品aa| 亚洲一区精品视频| 亚洲一区二区高清| 国产午夜精品全部视频在线播放| 久久国产天堂福利天堂| 午夜免费久久久久| 久久青草欧美一区二区三区| 欧美一区二区三区久久精品| 国内精品模特av私拍在线观看| 久久久久久久久久久一区| 久久久久久亚洲精品杨幂换脸| 亚洲大片av| 亚洲九九精品| 国产婷婷色综合av蜜臀av| 毛片一区二区三区| 欧美日韩精品免费观看视频| 欧美一级久久| 欧美不卡视频| 午夜精品久久久久久久白皮肤 | 国产欧美日韩一区| 老司机午夜精品| 欧美日韩不卡合集视频| 欧美一级免费视频| 免费永久网站黄欧美| 亚洲综合精品四区| 久久精品91久久香蕉加勒比 | 一区二区欧美在线观看| 羞羞色国产精品| 在线播放不卡| 亚洲视频一区二区在线观看| 在线观看精品视频| 亚洲丝袜av一区| 尤物yw午夜国产精品视频明星| 亚洲伦理自拍| 亚洲福利国产精品| 午夜一区二区三区不卡视频| 99riav久久精品riav| 久久久99久久精品女同性 | 欧美多人爱爱视频网站| 国产精品国产| 最新69国产成人精品视频免费| 国产美女一区二区| 亚洲伦理在线免费看| 亚洲国产精品美女| 欧美一区二区久久久| 亚洲欧美日韩在线| 欧美成人日韩| 免费成人黄色片| 国产婷婷色一区二区三区在线| 亚洲美女在线观看| 1000部精品久久久久久久久| 午夜在线精品偷拍| 亚洲欧美国产va在线影院| 欧美日韩福利视频| 亚洲国产一二三| 亚洲人体一区| 麻豆亚洲精品| 欧美激情亚洲激情| 亚洲国产片色| 美女91精品| 欧美成人精品三级在线观看| 激情一区二区| 久久精品亚洲一区二区| 久久精品女人的天堂av| 亚洲国产精品va在线观看黑人| 久久国产一区二区| 欧美制服丝袜第一页| 国产精品成人免费精品自在线观看| 欧美激情黄色片| 136国产福利精品导航网址| 欧美专区第一页| 美女主播视频一区| 亚洲国产cao| 欧美国产第一页| 亚洲精品视频一区| 亚洲一二三区精品| 国产精品一二三四| 午夜精品久久久久久99热软件| 午夜精品久久久久久久蜜桃app| 欧美午夜精品理论片a级按摩 | 亚洲最新中文字幕| 亚洲欧美福利一区二区| 国产精品系列在线播放| 欧美在线视频a| 亚洲电影免费在线观看| 日韩西西人体444www| 国产精品电影观看| 午夜宅男久久久| 欧美风情在线观看| 一区二区三区 在线观看视频| 国产精品成人一区二区艾草| 欧美有码在线观看视频| 欧美国产欧美综合| 亚洲尤物视频网| 激情六月综合| 欧美激情中文不卡| 午夜精品福利在线观看| 欧美黑人在线播放| 亚洲欧美日韩在线综合| 在线播放豆国产99亚洲| 欧美三级不卡| 久久久久99精品国产片| 亚洲美女一区| 欧美福利视频在线观看| 亚洲欧美日韩国产综合| 亚洲第一级黄色片| 国产精品老女人精品视频| 久热综合在线亚洲精品| 在线综合亚洲欧美在线视频| 欧美xx69| 欧美专区在线| 在线视频一区观看| 影音先锋久久资源网| 欧美视频中文在线看| 久久综合影音| 亚洲综合成人婷婷小说| 亚洲欧洲午夜| 免费日韩av| 久久精品国产2020观看福利| 一区二区三区欧美在线观看| 在线欧美三区| 国产亚洲一区二区三区| 欧美日韩在线播放一区| 久久偷窥视频| 欧美一级黄色网| 一区二区三区四区五区在线| 亚洲国产成人在线| 嫩草影视亚洲| 噜噜噜91成人网| 久久av在线|