c - UVA problems 12503 gives TLE -
i trying solve 12503 problem on uva online judge. think have figured out solution, gives me tle. here problem :
you have robot standing on origin of x axis. robot given instructions. task predict position after executing instructions.
• left: move 1 unit left (decrease p 1, p position of robot before moving)
• right: move 1 unit right (increase p 1)
• same i: perform same action in i-th instruction. guaranteed positive
input integer not greater number of instructions before this. first line contains number of test cases t (t <= 100). each test case begins integer n (1 <= n <= 100), number of instructions. each of following n lines contains instruction.
output
for each test case, print final position of robot. note after processing each test case, robot should reset origin.
sample input
2
3
left
right
same 2
5
left
same 1
same 2
same 1
same 4
sample output
1
-5
here code in c:
#include <stdio.h>  char com[102][20]; int command(char comd[], int pos);  int main() {     int t;     int pos;     int i, n;     char tmp[20];      scanf("%d", &t);     for(i = 0; < t; i++) {         scanf("%d", &n);          int j;          pos = 0;         (j = 0; j < n; j++) {             gets(com[j]);             if (strcmp(com[j], "left") == 0)                 pos--;             else if(strcmp(com[j], "right") == 0)                 pos++;             else {                 pos = command(com[j], pos);             }         }          printf("%d\n", pos);     }      return 0; }  int command(char comd[], int pos) {     if (strcmp(comd, "left") == 0) {         pos--;         return pos;     }     else if (strcmp(comd, "right") == 0) {         pos++;         return pos;     }     else{         int = atoi(&comd[8]);          return command(com[a-1], pos);     } }   is there suggestion why code gives tle ?
in int command(char comd[], int pos) function, using recursive call @ last line. may lead tle.
to solve problem can use array store number of steps taken robot @ command. have access index of array later step @ previous command.
here how it-
#include <stdio.h> #include <string.h>  int move[110]; int getmove(char inp[], int);  int main() {     int t, n;     char inp[50];      scanf(" %d ",&t);     while(t--)     {         scanf(" %d ",&n);          int i, pos = 0;         for(i = 0; < n; i++)         {             gets(inp);             pos += getmove(inp, i);         }          printf("%d\n",pos);     }      return 0; }  int getmove(char inp[], int i) {     if(inp[0]=='s')     {         int j;         sscanf(strrchr(inp,' ')," %d",&j);         move[i] = move[j - 1];     }     else     {         move[i] = (inp[0] == 'l') ? -1 : 1;     }     return move[i]; }      
Comments
Post a Comment