Pages

Related Posts with Thumbnails
Google CodeJam 2011–Magicka Problem Solved–C Programming >> Codes-N-Tricks
Content feed Comments Feed

Problem is Magicka on Google CodeJam 2011.
I have solved it in a iterative way.

Look at it.
 
Magicka Problem - CodeJam'2011
  1. #include<stdio.h>
  2. #include<string.h>
  3.  
  4. char combo[36][4],opps[28][3];
  5. int c,d;
  6. char base[]="QWERASDF";
  7.  
  8. int search_combo(char buff[],char *tmp);
  9. int search_opps(char inp[]);
  10.  
  11. char* strReverse(char* str)
  12. {
  13.      int i=0,j=0;
  14.      while(str[j] != '\0')
  15.      j++;
  16.      j--;
  17.      while(i<=j)
  18.      {
  19.                  char t = str[i];
  20.                  str[i++] = str[j];
  21.                  str[j--] = t;
  22.      }
  23.      return str;
  24. }
  25.  
  26. void code_it(char inp[],char op[])
  27. {
  28.      int i,j;
  29.      op[0]='[';op[1]='\0';
  30.      for(i=0,j=1;i<strlen(inp);i++)
  31.      {
  32.           if(i) strcat(op,(char *)", ");
  33.           sprintf(op,"%s%c",op,inp[i]);
  34.      }
  35.      strcat(op,(char *)"]");
  36. }
  37.  
  38. int main()
  39. {
  40.     int t,cnt=0,n,i,j,k,l;
  41.     char elm_list[101],op[101],otpt[700],buffer[3],tmp,tm_op[101];
  42.     
  43.     //freopen("B-large-practice.in", "r", stdin);
  44.     //freopen("test.out", "w", stdout);
  45.     scanf("%d",&t);
  46.     while(t--)
  47.     {
  48.               scanf("%d",&c);
  49.               for(i=0;i<c;i++)
  50.               {
  51.                    scanf("%s",combo[i]);
  52.               }
  53.               scanf("%d",&d);
  54.               for(i=0;i<d;i++)
  55.               {
  56.                    scanf("%s",opps[i]);
  57.               }
  58.               scanf("%d %s",&n,elm_list);
  59.                             
  60.               for(i=0,j=0;i<n;i++)
  61.               {
  62.                    op[j]=elm_list[i];
  63.                    if(j>0)
  64.                    {
  65.                         buffer[0]=op[j-1];buffer[1]=op[j];buffer[2]='\0';
  66.                         if(search_combo(buffer,&tmp)==1)
  67.                              op[--j]=tmp;    
  68.                    }
  69.                    op[++j]='\0';
  70.                    if(search_opps(op)==1)
  71.                    {
  72.                         j=0;
  73.                         op[j]='\0';
  74.                    }
  75.               }
  76.               code_it(op,otpt);
  77.               printf("Case #%d: %s\n",++cnt,otpt);
  78.     }
  79. }
  80.  
  81. int search_combo(char buff[],char *tmp)
  82. {
  83.     int i,j,fl=0;
  84.     char tm[3];
  85.     tm[2]='\0';
  86.     for(i=0;i<c;i++)
  87.     {
  88.          for(j=0;j<2;j++) tm[j]=combo[i][j];
  89.          if(strcmp(tm,buff)==0||strcmp(strReverse(tm),buff)==0)
  90.          {
  91.               *tmp=combo[i][2];
  92.               fl=1;
  93.               break;
  94.          }
  95.     }
  96.     return fl;
  97. }
  98.  
  99. int search_opps(char inp[])
  100. {
  101.      int k,l,i,j,fl=0;
  102.      char tmp[100],buff[3];
  103.      buff[2]='\0';tmp[0]='\0';
  104.      for(k=0,l=0;k<strlen(inp);k++)
  105.      {
  106.           if(strchr(tmp,inp[k])==NULL)
  107.               if(strchr(base,inp[k])!=NULL)
  108.                    tmp[l++]=inp[k];
  109.           tmp[l]='\0';
  110.      }
  111.      
  112.      if(strlen(tmp)<1) return 0;
  113.      for (i=0;i<strlen(tmp)-1;i++)
  114.      {
  115.           for (j=i+1;j<strlen(tmp);j++)
  116.           {
  117.                 buff[0]=tmp[i];buff[1]=tmp[j];
  118.                 for(k=0;k<d;k++)
  119.                 {
  120.                      if(strcmp(opps[k],buff)==0||strcmp(opps[k],strReverse(buff))==0)
  121.                      {
  122.                           fl=1;
  123.                           break;
  124.                      }
  125.                 }
  126.                 if(fl==1) break;
  127.           }
  128.           if(fl==1) break;
  129.      }
  130.      return fl;
  131. }
 
It’s slightly big.I think I can reduce that.Your suggestions are highly solicited.

Discussion will be carried out if needed.

0 Responses to Google CodeJam 2011–Magicka Problem Solved–C Programming

Post a Comment

SyntaxHighlighter

E-Mail Subscription

Enter your email address:

Subscribe & get Regular E-Mail Updates From Codes-N-Tricks.
Delivered by FeedBurner

Share with Orkut

Loading

Recent Posts

About Us