답안 #245193

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
245193 2020-07-05T16:56:12 Z urd05 여왕벌 (KOI15_queen) C++14
10 / 100
5000 ms 58336 KB
#include <bits/stdc++.h>
using namespace std;

int arr[700][700][3][3][3]; //i,j,l,lu,u
int zero[1000000];
int one[1000000];
int two[1000000];
int grow[700][700];
int val[700][700];
long long save[1400][700][11];

typedef pair<int,int> P;

P next(P pt) {
    if (pt.first==0) {
        return P(pt.first,pt.second+1);
    }
    return P(pt.first-1,pt.second);
}

int main(void) {
    int m,n;
    scanf("%d %d\n",&m,&n);
    for(int i=0;i<m;i++) {
        for(int j=0;j<m;j++) {
            val[i][j]=1;
        }
    }
    for(int i=1;i<m;i++) {
        for(int j=1;j<m;j++) {
            for(int l=0;l<3;l++) {
                for(int lu=0;lu<3;lu++) {
                    for(int u=0;u<3;u++) {
                        char x;
                        scanf("%c",&x);
                        if (x=='L') {
                            arr[i][j][l][lu][u]=l;
                        }
                        if (x=='D') {
                            arr[i][j][l][lu][u]=lu;
                        }
                        if (x=='U') {
                            arr[i][j][l][lu][u]=u;
                        }
                    }
                }
            }
            scanf("\n");
        }
    }
    if (n==1) {
        for(int i=0;i<n;i++) {
            scanf("%d %d %d",&zero[i],&one[i],&two[i]);
        }
        for(int ind=0;ind<n;ind++) {
            P pos=P(m-1,0);
            for(int j=0;j<zero[ind];j++) {
                grow[pos.first][pos.second]=0;
                pos=next(pos);
            }
            for(int j=0;j<one[ind];j++) {
                grow[pos.first][pos.second]=1;
                pos=next(pos);
            }
            for(int j=0;j<two[ind];j++) {
                grow[pos.first][pos.second]=2;
                pos=next(pos);
            }
            for(int i=1;i<m;i++) {
                grow[i][i]=arr[i][i][grow[i][i-1]][grow[i-1][i-1]][grow[i-1][i]];
                for(int j=i+1;j<m;j++) {
                    grow[i][j]=arr[i][j][grow[i][j-1]][grow[i-1][j-1]][grow[i-1][j]];
                }
                for(int j=i+1;j<m;j++) {
                    grow[j][i]=arr[j][i][grow[j][i-1]][grow[j-1][i-1]][grow[j-1][i]];
                }
            }
            for(int i=0;i<m;i++) {
                for(int j=0;j<m;j++) {
                    val[i][j]+=grow[i][j];
                }
            }
        }
        for(int i=0;i<m;i++) {
            for(int j=0;j<m;j++) {
                printf("%d ",val[i][j]);
            }
            printf("\n");
        }
        return 0;
    }
    int cnt[1400];
    memset(cnt,0,sizeof(cnt));
    for(int i=0;i<n;i++) {
        scanf("%d %d %d",&zero[i],&one[i],&two[i]);
        cnt[zero[i]]++;
    }
    for(int ind=0;ind<2*m;ind++) {
        zero[ind]=ind;
        one[ind]=2*m-1-ind;
        P pos=P(m-1,0);
        for(int j=0;j<zero[ind];j++) {
            grow[pos.first][pos.second]=0;
            pos=next(pos);
        }
        for(int j=0;j<one[ind];j++) {
            grow[pos.first][pos.second]=1;
            pos=next(pos);
        }
        for(int j=0;j<two[ind];j++) {
            grow[pos.first][pos.second]=2;
            pos=next(pos);
        }
        for(int i=1;i<m;i++) {
            grow[i][i]=arr[i][i][grow[i][i-1]][grow[i-1][i-1]][grow[i-1][i]];
            for(int j=i+1;j<m;j++) {
                grow[i][j]=arr[i][j][grow[i][j-1]][grow[i-1][j-1]][grow[i-1][j]];
            }
            for(int j=i+1;j<m;j++) {
                grow[j][i]=arr[j][i][grow[j][i-1]][grow[j-1][i-1]][grow[j-1][i]];
            }
        }
        for(int i=0;i<m;i++) {
            for(int j=0;j<m;j++) {
                save[ind][i][j/64]|=(grow[i][j]<<(j%64));
            }
        }
    }
    for(int i=0;i<m;i++) {
        for(int j=0;j<m;j++) {
            int val=1;
            for(int k=0;k<2*m;k++) {
                val+=cnt[k]*((save[k][i][j/64]>>(j%64))&1);
            }
            printf("%d ",val);
        }
        printf("\n");
    }
}

Compilation message

queen.cpp: In function 'int main()':
queen.cpp:23:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d %d\n",&m,&n);
     ~~~~~^~~~~~~~~~~~~~~~~
queen.cpp:35:30: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
                         scanf("%c",&x);
                         ~~~~~^~~~~~~~~
queen.cpp:48:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
             scanf("\n");
             ~~~~~^~~~~~
queen.cpp:53:18: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
             scanf("%d %d %d",&zero[i],&one[i],&two[i]);
             ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
queen.cpp:95:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d %d %d",&zero[i],&one[i],&two[i]);
         ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 512 KB Output is correct
2 Correct 5 ms 512 KB Output is correct
3 Correct 20 ms 2432 KB Output is correct
4 Correct 20 ms 2432 KB Output is correct
5 Correct 152 ms 12920 KB Output is correct
6 Correct 146 ms 12792 KB Output is correct
7 Correct 142 ms 12792 KB Output is correct
8 Correct 389 ms 31876 KB Output is correct
9 Correct 384 ms 31992 KB Output is correct
10 Correct 759 ms 56824 KB Output is correct
11 Correct 810 ms 56952 KB Output is correct
12 Correct 805 ms 56952 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 8 ms 640 KB Output is correct
2 Incorrect 3054 ms 31328 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 7 ms 640 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5079 ms 58336 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 384 KB Output is correct
2 Incorrect 4 ms 384 KB Output isn't correct
3 Halted 0 ms 0 KB -