#11082: TLE 可以給個方向改進嘛?thanks'


vagrantlike (丫維)

學校 : 不指定學校
編號 : 27614
來源 : [114.24.87.102]
最後登入時間 :
2020-01-23 17:45:52
a817. 1.圈叉連線數問題 -- 100學年度桃竹苗區資訊學科能力競賽 | From: [163.29.253.102] | 發表日期 : 2016-06-22 10:04

、程式碼如下

有誤 修改如下

感謝任何建議...

//////////////////////////////////////////////////////////////////////

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//X:0;O:-1
int square[101][101]= {{0},{0}};


int main() {
    int n = 0,i = 0,j = 0,k = 0,temp = 0,count = 0,dot = 0;

    while(scanf("%d",&n)==1) {
        i = 0,j = 0,k = 0,temp = 0,count = 0,dot = 0;
        memset(square,0,sizeof(square));

        for(i=0; i<n; ++i) {
            do {
                scanf("%d",&temp);

                if(temp==0) {
                    ;
                }

                square[i][temp-1] = -1;

            } while(getchar()!='\n');

        }


        // 檢查橫線
        for(i=0; i<n; ++i) {
            j=0;
            while((j<n-1)&&(square[i][j]==square[i][j+1])) {
                ++j;
            }

            if(j==n-1) {
                ++count;
            }
        }

        // 檢查直線
        for(j=0; j<n; ++j) {
            i=0;
            while((i<n-1)&&(square[i][j]==square[i+1][j])) {
                ++i;
            }

            if(i==n-1) {
                ++count;
            }
        }

        // 檢查斜線
        // 由主對角線往兩旁擴展做檢查
        // 先左上到右下 再由右上到左下

        for(i=0; n-i>=3; ++i) {
            j=0,k=i;
            dot=0;
            while((square[k][j]==square[k+1][j+1])&&(k<n-1)) {
                ++k,++j;
                ++dot;
            }
          
            if(dot==n-i-1&&dot>=2)
                ++count;
        }

        for(j = 1; n-j>=3; ++j) {
            i=0,k=j;
            dot=0;
            while((square[i][k]==square[i+1][k+1])&&(k<n-1)) {
                ++i,++k;
                ++dot;
            }


            if(dot==n-j-1&&dot>=2)
                ++count;
        }

        for(i=n-1; n-i<=3; --i) {
            j=0,k=i;
            dot=0;
            while((square[k][j]==square[k-1][j+1])&&(k>0)) {
                --k,++j;
                ++dot;
            }


            if(dot==i&&dot>=2)
                ++count;

        }

        for(j=1; n-j>=3; ++j) {
            i=n-1,k = j;
            dot=0;
            while((square[i][k]==square[i-1][k+1])&&(k<n-1)) {
                --i,++k;
                ++dot;
            }


            if(dot==n-j-1&&dot>=2)
                ++count;
        }

        printf("%d\n",count);

    }

    return 0;
}

 
ZeroJudge Forum