除了题目难读,也没别的了。。。
题意: 洗碗过程,有人给你碗,有人需要你的碗去洗。你可以放盘子到1(2)位置,移动盘子到1(2)位置,拿盘子从1(2)位置。 要求洗碗的顺序与所给的顺序相同。 模拟题目所给操作。
思路: 就相当于两个栈,一个是放,一个取。因为要求顺序相同,所以每次洗碗的那个位置碗不够的时候,就把放碗部分的碗全部移过来,这可以保证当前栈顶是最先到达的盘子。
#include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <vector> #include <map> using namespace std; int main() { int n; while(~scanf("%d",&n) && n) { int one = 0,two = 0; for(int i = 1;i <= n;i++) { char s[10]; int num; scanf("%s%d",s,&num); if(s[0] == 'D') { printf("DROP 2 %d\n",num); two += num; } else { if(one >= num) { printf("TAKE 1 %d\n",num); one -= num; } else { if(one) printf("TAKE 1 %d\n",one); num -= one; printf("MOVE 2->1 %d\n",two); one = two - num; two = 0; printf("TAKE 1 %d\n",num); } } } printf("\n"); } return 0; }