#11920: C執行逾時


forever84721 (廖翊傑)

學校 : 國立勤益科技大學
編號 : 50169
來源 : [61.31.169.97]
最後登入時間 :
2023-02-22 17:19:46
a417. 螺旋矩陣 | From: [27.100.69.133] | 發表日期 : 2017-04-19 19:31

這是我的程式碼 執行起來是對的 感覺也不會太慢 但是一直

第 1 測資點(10%): AC (0ms, 64KB)
通過檢測

第 2 測資點(90%): TLE (1s)
執行逾時

Killed

 

原本switch的部分改成if似乎也沒用

請問有甚麼方法可以加速嗎?還是我寫得太複雜了 需要重寫?

感謝

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main(int argc, char *argv[])
  4. {
  5.     int a,b,i,j,x,y,z;
  6.     int st;//1右     2下     3左     4上
  7.     while(scanf("%d",&a)!=EOF)
  8.     {
  9.         for(b=0;b<a;b++)
  10.         {
  11.             scanf("%d%d",&x,&y);
  12.             int ans[x][x];
  13.             z=1;
  14.             if(y==1)
  15.             {
  16.                 st=1;
  17.             }
  18.             else if(y==2)
  19.             {
  20.                 st=2;
  21.             }
  22.             while(z<(x*x)+1)
  23.             {
  24.                 for(i=0;i<x;i++)
  25.                 {
  26.                     for(j=0;j<x;j++)
  27.                     {
  28.                         ans[i][j]=0;
  29.                     }
  30.                 }
  31.                 i=0,j=0;
  32.                 for(z=1;z<=x*x;z++)
  33.                 {
  34.                     ans[i][j]=z;
  35.                    
  36.                     //switch(st)
  37.                     {
  38.                         //case 1://右
  39.                         if(st==1)
  40.                         {
  41.                             if(j+1<x)
  42.                             {
  43.                                 if(ans[i][j+1]==0)
  44.                                 {
  45.                                     j++;
  46.                                 }  
  47.                                 else
  48.                                 {
  49.                                     if(z!=x*x)
  50.                                     {
  51.                                         z--;
  52.                                     }
  53.                                     if(y==1)
  54.                                     {
  55.                                         st=2;
  56.                                     }
  57.                                     else if(y==2)
  58.                                     {
  59.                                         st=4;
  60.                                     }
  61.                                 }
  62.                             }
  63.                             else
  64.                             {
  65.                                 z--;
  66.                                 if(y==1)
  67.                                 {
  68.                                     st=2;
  69.                                 }
  70.                                 else if(y==2)
  71.                                 {
  72.                                     st=4;
  73.                                 }
  74.                             }
  75.                             //break;
  76.                         }
  77.                         //case 2://下
  78.                         else if(st==2)
  79.                         {
  80.                             if(i+1<x)
  81.                             {
  82.                                 if(ans[i+1][j]==0)
  83.                                 {
  84.                                     i++;
  85.                                 }  
  86.                                 else
  87.                                 {
  88.                                     if(z!=x*x)
  89.                                     {
  90.                                         z--;
  91.                                     }
  92.                                     if(y==1)
  93.                                     {
  94.                                         st=3;
  95.                                     }
  96.                                     else if(y==2)
  97.                                     {
  98.                                         st=1;
  99.                                     }
  100.                                 }
  101.                             }
  102.                             else
  103.                             {
  104.                                 z--;
  105.                                 if(y==1)
  106.                                 {
  107.                                     st=3;
  108.                                 }
  109.                                 else if(y==2)
  110.                                 {
  111.                                     st=1;
  112.                                 }
  113.                             }
  114.                             //break;
  115.                         }
  116.                         //case 3://左
  117.                         else if(st==3)
  118.                         {
  119.                             if(j-1>=0)
  120.                             {
  121.                                 if(ans[i][j-1]==0)
  122.                                 {
  123.                                     j--;
  124.                                 }  
  125.                                 else
  126.                                 {
  127.                                     if(z!=x*x)
  128.                                     {
  129.                                         z--;
  130.                                     }
  131.                                     if(y==1)
  132.                                     {
  133.                                         st=4;
  134.                                     }
  135.                                     else if(y==2)
  136.                                     {
  137.                                         st=2;
  138.                                     }
  139.                                 }
  140.                             }
  141.                             else
  142.                             {
  143.                                 z--;
  144.                                 if(y==1)
  145.                                 {
  146.                                     st=4;
  147.                                 }
  148.                                 else if(y==2)
  149.                                 {
  150.                                     st=2;
  151.                                 }
  152.                             }
  153.                             //break;
  154.                         }
  155.                         //case 4://上
  156.                         else if(st==4)
  157.                         {
  158.                             if(i-1>=0)
  159.                             {
  160.                                 if(ans[i-1][j]==0)
  161.                                 {
  162.                                     i--;
  163.                                 }  
  164.                                 else
  165.                                 {
  166.                                     if(z!=x*x)
  167.                                     {
  168.                                         z--;
  169.                                     }
  170.                                     if(y==1)
  171.                                     {
  172.                                         st=1;
  173.                                     }
  174.                                     else if(y==2)
  175.                                     {
  176.                                         st=3;
  177.                                     }
  178.                                 }
  179.                             }
  180.                             else
  181.                             {
  182.                                 z--;
  183.                                 if(y==1)
  184.                                 {
  185.                                     st=1;
  186.                                 }
  187.                                 else if(y==2)
  188.                                 {
  189.                                     st=3;
  190.                                 }
  191.                             }
  192.                             //break;
  193.                         }
  194.                     }
  195.                 }
  196.             }
  197.             for(i=0;i<x;i++)
  198.             {
  199.                 for(j=0;j<x;j++)
  200.                 {
  201.                     printf("%5d",ans[i][j]);
  202.                 }
  203.                 printf("\n");
  204.             }
  205.         }
  206.     }
  207.     return 0;
  208. }
 
#11921: Re:C執行逾時


forever84721 (廖翊傑)

學校 : 國立勤益科技大學
編號 : 50169
來源 : [61.31.169.97]
最後登入時間 :
2023-02-22 17:19:46
a417. 螺旋矩陣 | From: [27.100.69.133] | 發表日期 : 2017-04-19 19:45

原來是忘記考慮輸入1的狀況

稍微修改一下就可以囉

順便給大家參考

 
 
ZeroJudge Forum