Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #define NUMCAR 1000
- #define NUMROW 20
- #define NUMSEAT 5
- typedef struct seat{
- int car;
- int row;
- int seat;
- }seat;
- int nextSeat(seat *ptrSeat, int n){
- if(ptrSeat->seat == 4){
- if(ptrSeat->row == 19){
- if(ptrSeat->car == n-1){
- return 0;//FULL
- }
- else{
- ptrSeat->car++;
- ptrSeat->row = 0;
- }
- }
- else
- ptrSeat->row++;
- ptrSeat->seat = 0;
- }
- else
- ptrSeat->seat++;
- return 1;
- }
- void findSingle(int train[NUMCAR][NUMROW][NUMSEAT], seat *ptrSingle, int n, int Double){
- while(train[ptrSingle->car][ptrSingle->row][ptrSingle->seat])
- nextSeat(ptrSingle, n);
- train[ptrSingle->car][ptrSingle->row][ptrSingle->seat] = 1;
- printf("%d %d %d %s", ptrSingle->car+1, ptrSingle->row+1, ptrSingle->seat+1, Double == 1 ? "" : "\n");
- }
- void findDouble(int train[NUMCAR][NUMROW][NUMSEAT], seat *ptrTail, seat *ptrSingle, int n){
- int together = 1;
- while(train[ptrTail->car][ptrTail->row][ptrTail->seat] && together == 1)
- together = nextSeat(ptrTail, n);
- if(ptrTail->seat == 2)
- nextSeat(ptrTail, n);
- else if(ptrTail->seat == 4)
- together = nextSeat(ptrTail, n);
- if(together){
- train[ptrTail->car][ptrTail->row][ptrTail->seat] = 1;
- train[ptrTail->car][ptrTail->row][ptrTail->seat+1] = 1;
- printf("%d %d %d %d %d %d \n", ptrTail->car+1, ptrTail->row+1, ptrTail->seat+1, ptrTail->car+1, ptrTail->row+1, (++ptrTail->seat)+1);
- }
- else{
- findSingle(train, ptrSingle, n, 1);
- findSingle(train, ptrSingle, n, 0);
- }
- }
- int main(){
- int train[NUMCAR][NUMROW][NUMSEAT] = {0};
- seat ptrTail;
- ptrTail.car = 0;
- ptrTail.row = 0;
- ptrTail.seat = 0;
- seat ptrSingle;
- ptrSingle.car = 0;
- ptrSingle.row = 0;
- ptrSingle.seat = 0;
- int n, R;
- scanf("%d", &n);//number of cars in the train
- while(scanf("%d", &R) != EOF){
- if(R == 2)
- findDouble(train, &ptrTail, &ptrSingle, n);
- else
- findSingle(train, &ptrSingle, n, 0);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment