답안 #245194

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
245194 2020-07-05T16:57:31 Z urd05 여왕벌 (KOI15_queen) C++14
10 / 100
5000 ms 57292 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];
unsigned 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;
      	two[ind]=0;
        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 21 ms 2304 KB Output is correct
5 Correct 147 ms 12920 KB Output is correct
6 Correct 141 ms 12920 KB Output is correct
7 Correct 141 ms 12796 KB Output is correct
8 Correct 391 ms 31992 KB Output is correct
9 Correct 396 ms 32064 KB Output is correct
10 Correct 744 ms 56952 KB Output is correct
11 Correct 789 ms 57040 KB Output is correct
12 Correct 785 ms 56912 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 8 ms 640 KB Output is correct
2 Incorrect 2714 ms 31420 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 8 ms 640 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Execution timed out 5081 ms 57292 KB Time limit exceeded
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 5 ms 384 KB Output is correct
2 Incorrect 5 ms 384 KB Output isn't correct
3 Halted 0 ms 0 KB -