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

superman

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

ZOJ 1190 - Optimal Programs

Posted on 2008-05-19 15:53 superman 閱讀(461) 評論(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>
            老司机成人网| 欧美一区免费视频| 亚洲一区免费网站| 日韩视频免费在线| 亚洲六月丁香色婷婷综合久久| 亚洲国产精品va在线看黑人动漫| 亚洲电影在线| 亚洲片在线观看| 一本色道久久加勒比精品| 亚洲人成网站在线观看播放| 亚洲国产精品传媒在线观看| 亚洲免费成人av电影| 亚洲一级高清| 亚洲欧美在线免费观看| 久久久久久色| 最新成人av在线| 亚洲激情视频网站| 亚洲影院污污.| 久久久精品视频成人| 欧美伦理91i| 国产日韩精品久久| 日韩视频在线免费观看| 欧美一二三区精品| 欧美国产视频一区二区| 一区二区三区日韩精品视频| 久久久精品一区二区三区| 美女日韩在线中文字幕| 国产精品九九久久久久久久| 国产一区二区日韩| 亚洲图片欧美日产| 欧美成人午夜视频| 午夜精品久久久久久久99樱桃 | 久久亚洲综合| 欧美视频四区| 在线播放视频一区| 午夜视频在线观看一区| 亚洲国产精品久久久久婷婷884 | 欧美va亚洲va日韩∨a综合色| 亚洲国产欧美不卡在线观看| 亚洲精品综合| 久久久久久久久久久成人| 国产精品videosex极品| 亚洲第一网站免费视频| 欧美一区二区三区的| 欧美激情二区三区| 久久国产加勒比精品无码| 国产精品激情av在线播放| 亚洲精选久久| 欧美顶级大胆免费视频| 亚洲欧美制服中文字幕| 欧美日韩精品免费| 亚洲欧洲另类国产综合| 欧美电影打屁股sp| 久久亚洲私人国产精品va媚药 | 亚洲国产天堂久久综合| 香蕉久久国产| 99香蕉国产精品偷在线观看| 欧美极品影院| 日韩亚洲欧美中文三级| 亚洲高清免费视频| 免费观看久久久4p| 亚洲高清久久网| 另类成人小视频在线| 久久久国产精品亚洲一区 | 久久嫩草精品久久久久| 国产中文一区二区| 欧美在线亚洲在线| 欧美一区不卡| 精品不卡一区| 欧美韩日高清| 美女国产一区| 日韩亚洲欧美精品| 99在线精品视频| 国产精品三上| 看片网站欧美日韩| 欧美成人第一页| 亚洲视频在线观看三级| 亚洲一区二区日本| 狠狠色综合网| 亚洲人成网站色ww在线| 欧美午夜在线视频| 久久久久成人精品免费播放动漫| 久久经典综合| av成人手机在线| 午夜精品三级视频福利| 狠狠色伊人亚洲综合成人| 久久免费视频观看| 欧美激情综合网| 欧美一区二区免费| 久热这里只精品99re8久| 99国产精品私拍| 亚洲女人天堂成人av在线| 国模精品一区二区三区色天香| 欧美成人dvd在线视频| 欧美日韩精品久久| 国产一区在线免费观看| 暖暖成人免费视频| 欧美日韩在线综合| 久久午夜视频| 欧美日韩在线大尺度| 久久精品视频免费播放| 另类春色校园亚洲| 午夜精品一区二区在线观看| 免费成人av资源网| 欧美一区二区视频在线观看| 久久亚洲精品一区| 午夜日韩在线观看| 欧美黄色aa电影| 香蕉av福利精品导航| 久久久精彩视频| 亚洲欧美日韩在线不卡| 欧美成人第一页| 久久久精彩视频| 欧美mv日韩mv国产网站| 久久久久久穴| 国产精品红桃| 亚洲黄色在线看| 精品盗摄一区二区三区| 亚洲精选成人| 影音先锋中文字幕一区二区| 亚洲一级黄色片| 亚洲天天影视| 欧美激情aaaa| 欧美91视频| 国产中文一区| 午夜亚洲福利| 午夜精品影院在线观看| 美脚丝袜一区二区三区在线观看| 欧美专区一区二区三区| 欧美日韩在线观看一区二区三区 | 亚洲第一色在线| 伊人久久噜噜噜躁狠狠躁| 一本色道久久88精品综合| 亚洲精品午夜| 久久久国产精品一区| 欧美一区二区| 国产精品久久久久久久久久免费| 亚洲高清久久网| 亚洲人成人99网站| 欧美成人精品不卡视频在线观看 | 中日韩美女免费视频网址在线观看| 亚洲区免费影片| 老**午夜毛片一区二区三区| 久久久99国产精品免费| 国产日韩亚洲欧美综合| 欧美一区二区在线看| 久久蜜桃精品| 在线播放视频一区| 美日韩精品免费| 亚洲国产天堂久久国产91| 亚洲日本免费电影| 欧美精品七区| 一区二区三区高清在线观看| 香港久久久电影| 黄色av日韩| 麻豆九一精品爱看视频在线观看免费| 欧美**字幕| 日韩视频一区二区三区| 欧美视频二区36p| 一区二区激情小说| 亚洲人成毛片在线播放| 欧美日韩不卡视频| 99精品视频免费在线观看| 午夜久久电影网| 尤物九九久久国产精品的分类| 男人天堂欧美日韩| 一本久久综合亚洲鲁鲁| 久久婷婷国产综合国色天香| 亚洲人被黑人高潮完整版| 欧美日韩中文字幕| 欧美一区二区三区四区视频| 亚洲国产mv| 欧美一区日韩一区| 在线播放豆国产99亚洲| 欧美精品在欧美一区二区少妇| 亚洲午夜久久久| 久久伊人精品天天| 亚洲视频第一页| 性做久久久久久| 亚洲电影免费在线| 欧美日韩极品在线观看一区| 欧美一区三区三区高中清蜜桃| 亚洲欧洲一区| 亚洲专区欧美专区| 亚洲国产综合在线| 欧美午夜一区| 免费黄网站欧美| 亚洲视频二区| 亚洲激情一区| 久久色在线观看| 一区二区三区毛片| 精品51国产黑色丝袜高跟鞋| 国产精品久久久久久久免费软件| 久久综合九色综合欧美就去吻| 亚洲综合欧美| aa级大片欧美| 最近看过的日韩成人| 另类综合日韩欧美亚洲| 欧美综合国产精品久久丁香| 亚洲一二区在线|