Codeforces Round #208 (Div. 2) C. Dima and Containers
2013-10-27 18:42
459 查看
C. Dima and Containers
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
Dima has a birthday soon! It's a big day! Saryozha's present to Dima is that Seryozha won't be in the room and won't disturb Dima and Inna as they celebrate the birthday. Inna's present to Dima is a stack, a queue and a deck.
Inna wants her present to show Dima how great a programmer he is. For that, she is going to give Dima commands one by one. There are two types of commands:
Add a given number into one of containers. For the queue and the stack, you can add elements only to the end. For the deck, you can add elements to the beginning and to the end.
Extract a number from each of at most three distinct containers. Tell all extracted numbers to Inna and then empty all containers. In the queue container you can extract numbers only from the beginning. In the stack container you can extract numbers only from
the end. In the deck number you can extract numbers from the beginning and from the end. You cannot extract numbers from empty containers.
Every time Dima makes a command of the second type, Inna kisses Dima some (possibly zero) number of times. Dima knows Inna perfectly well, he is sure that this number equals the sum of numbers he extracts from containers during this operation.
As we've said before, Dima knows Inna perfectly well and he knows which commands Inna will give to Dima and the order of the commands. Help Dima find the strategy that lets him give as more kisses as possible for his birthday!
Input
The first line contains integer n (1 ≤ n ≤ 105) —
the number of Inna's commands. Then n lines follow, describing Inna's commands. Each line consists an integer:
Integer a (1 ≤ a ≤ 105) means
that Inna gives Dima a command to add number a into one of containers.
Integer 0 shows that Inna asks Dima to make at most three extractions from different containers.
Output
Each command of the input must correspond to one line of the output — Dima's action.
For the command of the first type (adding) print one word that corresponds to Dima's choice:
pushStack — add to the end of the stack;
pushQueue — add to the end of the queue;
pushFront — add to the beginning of the deck;
pushBack — add to the end of the deck.
For a command of the second type first print an integer k (0 ≤ k ≤ 3),
that shows the number of extract operations, then print k words separated by space. The words can be:
popStack — extract from the end of the stack;
popQueue — extract from the beginning of the line;
popFront — extract from the beginning from the deck;
popBack — extract from the end of the deck.
The printed operations mustn't extract numbers from empty containers. Also, they must extract numbers from distinct containers.
The printed sequence of actions must lead to the maximum number of kisses. If there are multiple sequences of actions leading to the maximum number of kisses, you are allowed to print any of them.
Sample test(s)
input
output
input
output
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
Dima has a birthday soon! It's a big day! Saryozha's present to Dima is that Seryozha won't be in the room and won't disturb Dima and Inna as they celebrate the birthday. Inna's present to Dima is a stack, a queue and a deck.
Inna wants her present to show Dima how great a programmer he is. For that, she is going to give Dima commands one by one. There are two types of commands:
Add a given number into one of containers. For the queue and the stack, you can add elements only to the end. For the deck, you can add elements to the beginning and to the end.
Extract a number from each of at most three distinct containers. Tell all extracted numbers to Inna and then empty all containers. In the queue container you can extract numbers only from the beginning. In the stack container you can extract numbers only from
the end. In the deck number you can extract numbers from the beginning and from the end. You cannot extract numbers from empty containers.
Every time Dima makes a command of the second type, Inna kisses Dima some (possibly zero) number of times. Dima knows Inna perfectly well, he is sure that this number equals the sum of numbers he extracts from containers during this operation.
As we've said before, Dima knows Inna perfectly well and he knows which commands Inna will give to Dima and the order of the commands. Help Dima find the strategy that lets him give as more kisses as possible for his birthday!
Input
The first line contains integer n (1 ≤ n ≤ 105) —
the number of Inna's commands. Then n lines follow, describing Inna's commands. Each line consists an integer:
Integer a (1 ≤ a ≤ 105) means
that Inna gives Dima a command to add number a into one of containers.
Integer 0 shows that Inna asks Dima to make at most three extractions from different containers.
Output
Each command of the input must correspond to one line of the output — Dima's action.
For the command of the first type (adding) print one word that corresponds to Dima's choice:
pushStack — add to the end of the stack;
pushQueue — add to the end of the queue;
pushFront — add to the beginning of the deck;
pushBack — add to the end of the deck.
For a command of the second type first print an integer k (0 ≤ k ≤ 3),
that shows the number of extract operations, then print k words separated by space. The words can be:
popStack — extract from the end of the stack;
popQueue — extract from the beginning of the line;
popFront — extract from the beginning from the deck;
popBack — extract from the end of the deck.
The printed operations mustn't extract numbers from empty containers. Also, they must extract numbers from distinct containers.
The printed sequence of actions must lead to the maximum number of kisses. If there are multiple sequences of actions leading to the maximum number of kisses, you are allowed to print any of them.
Sample test(s)
input
10 0 1 0 1 2 0 1 2 3 0
output
0 pushStack 1 popStack pushStack pushQueue 2 popStack popQueue pushStack pushQueue pushFront 3 popStack popQueue popFront
input
4 1 2 3 0
output
pushStack pushQueue pushFront 3 popStack popQueue popFront
这题其实,就是找到前三个最大的,那么,第一个大的放到queue中,第二大的放到stack中,第三大的放到deque头中,其它的全部放到dpque尾中就可以了,这样,马上就可以得到答案!还有一个小bug 要注意,就是,如果最后没有0,也要放进去!
#include <iostream> #include <stdio.h> #include <string.h> using namespace std; #define M 100050 int sta[M],que[M],dp[M],n[3],pri[M]; int main() { int i,m[3],nn,j,k; while(scanf("%d",&nn)!=EOF){ for(i=0;i<nn;i++) scanf("%d",&pri[i]); m[0]=m[1]=m[2]=-1; int last=-1; for(i=0;i<nn;i++){ if(pri[i]==0){ if(m[0]>m[1])swap(m[0],m[1]); if(m[1]>m[2])swap(m[1],m[2]); if(m[0]>m[1])swap(m[0],m[1]); //printf("%d %d %d %d %d\n",i,i-last-1,m[0],m[1],m[2]); if(i-last-1==0){ printf("0\n"); last=i; continue; } for(j=last+1;j<i;j++){ if(j!=m[0]&&j!=m[1]&&j!=m[2]){ printf("pushBack\n");n[2]++; } else if(j==m[0]){ printf("pushQueue\n");n[0]++; } else if(j==m[1]){ printf("pushStack\n");n[1]++; } else if(j==m[2]){ printf("pushFront\n");n[2]++; } } int index=0; for(j=0;j<3;j++) if(n[j]) index++; printf("%d",index); if(n[0])printf(" popQueue"); if(n[1])printf(" popStack"); if(n[2])printf(" popFront"); printf("\n"); last=i;m[0]=m[1]=m[2]=-1;n[0]=n[1]=n[2]=0; continue; } for(j=0;j<3;j++){ if(m[j]==-1||pri[i]>=pri[m[j]]){ for(k=2;k>j;k--){ m[k]=m[k-1]; } m[j]=i; break; } } } //printf("%d",last); if(last!=nn-1){ if(m[0]>m[1])swap(m[0],m[1]); if(m[1]>m[2])swap(m[1],m[2]); if(m[0]>m[1])swap(m[0],m[1]); for(j=last+1;j<i;j++){ if(j!=m[0]&&j!=m[1]&&j!=m[2]){ printf("pushBack\n");n[2]++; } else if(j==m[0]){ printf("pushQueue\n");n[0]++; } else if(j==m[1]){ printf("pushStack\n");n[1]++; } else if(j==m[2]){ printf("pushFront\n");n[2]++; } } continue; } } return 0; }
相关文章推荐
- codeforces #233 (Div2) A. Sereja and Dima【模拟】+B. Sereja and Stairs【暴力】
- Codeforces Round #214 (Div. 2) D. Dima and Trap Graph (枚举+二分+搜索)
- Codeforces Round #208 (Div. 2) B. Dima and Text Messages
- Codeforces Round #324 (Div. 2)——D. Dima and Lisa
- 【Codeforces Round 324 (Div 2)D】【miller-rabin素数检验 猜想】Dima and Lisa 奇数拆分成三素数
- Codeforces Round #223 (Div. 2)--A. Sereja and Dima
- Codeforces Round #208 (Div. 2) A. Dima and Continuous Line
- Codeforces Round #214 (Div. 2) C. Dima and Salad
- Codeforces Round #324 (Div. 2) D. Dima and Lisa 哥德巴赫猜想
- Codeforces Round #324 (Div. 2) Dima and Lisa 哥德巴赫猜想
- Codeforces Round #214 (Div. 2) C: Dima and Salad 想减肥?吃沙拉
- Codeforces Round #262 (Div. 2) B. Little Dima and Equation
- Codeforces Round #208 (Div. 2) B. Dima and Text Messages
- Codeforces Round #223 (Div. 2)——A. Sereja and Dima
- Codeforces Round #262(div2) B. Little Dima and Equation
- Codeforces Round #214 (Div. 2) C. Dima and Salad (背包变形)
- Codeforces Round #262 (Div. 2)B. Little Dima and Equation
- Codeforces #262 (Div. 2) B. Little Dima and Equation(数学:简单)
- Codeforces Round #229 (Div. 2)B. Inna, Dima and Song
- Codeforces 584 D. Dima and Lisa ( Codeforces Round #324 (Div. 2))