답안 #284766

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
284766 2020-08-28T02:33:10 Z dantoh000 Red-blue table (IZhO19_stones) C++14
38 / 100
63 ms 4860 KB
#include <bits/stdc++.h>
using namespace std;
int ans[1005][1005];
int rct[1005];
int cct[1005];
int main(){
    int tc;
    scanf("%d",&tc);
    while (tc--){
        int n,m;
        scanf("%d%d",&n,&m);
        if (min(n,m) <= 3 || (n <= 4 && m <= 4)){
            if (n > m){
                printf("%d\n",n+(m-1)/2);
                for (int i = 0; i < n; i++){
                    for (int j = 0; j < m; j++){
                        if (j < (m-1)/2){
                            printf("-");
                        }
                        else printf("+");
                    }
                    printf("\n");
                }
            }
            else{
                printf("%d\n",(n-1)/2+m);
                for (int i = 0; i < n; i++){
                    for (int j = 0; j < m; j++){
                        if (i < (n-1)/2){
                            printf("+");
                        }
                        else printf("-");
                    }
                    printf("\n");
                }
            }
            continue;
        }
        int flag = 0;
        int flag2 = 0;
        int flag3 = 0;
        if (n < m){
            flag = 1;
            swap(n,m);
        }
        if (n%2 == 0) {
            flag2 = 1;
            n--;
        }
        if (m%2 == 0){
            flag3 = 1;
            m--;
        }
        for (int i = 0; i < n; i++) rct[i] = 0;
        for (int j = 0; j < m; j++) cct[j] = 0;
        for (int i = 0; i < n; i++){
            int num = (m-1)/2;
            for (int j = 0; j < m; j++){
                if ((i == n-1 && (m-1)/2 >= 1) || cct[j]+1 < n-cct[j]-1 && num){
                    cct[j]++;
                    num--;
                    rct[i]++;
                    ans[i][j] = 1;
                }
                else ans[i][j] = 0;
            }
        }
        int sum = 0;
        if (flag2){
            n++;
            for (int i = 0; i < m; i++){
                if (m > 2){
                    ans[n-1][i] = 1;
                    cct[i]++;
                    rct[n-1]++;
                }
            }
        }
        if (flag3){
            m++;
            for (int i = 0; i < n; i++){
                if (m > 1){
                    ans[i][m-1] = 0;
                }
                else{
                    ans[i][m-1] = 1;
                    cct[m-1]++;
                    rct[i]++;
                }
            }
        }
        for (int i = 0; i < n; i++){
            if (rct[i] < m-rct[i]) {
                //printf("row %d : %d / %d\n",i,rct[i],m);
                sum++;
            }
        }
        for (int i = 0; i < m; i++){
            if (cct[i] > n-cct[i]) {
                //printf("col %d : %d / %d\n",i,cct[i],n);
                sum++;
            }
        }
        printf("%d\n",sum);
        if (flag){
            for (int i = 0; i < m; i++){
                for (int j = 0; j < n; j++){
                    printf("%c",ans[j][i]?'+':'-');
                }
                printf("\n");
            }
        }
        else{
            for (int i = 0; i < n; i++){
                for (int j = 0; j < m; j++){
                    printf("%c",ans[i][j]?'-':'+');
                }
                printf("\n");
            }
        }



    }

}

Compilation message

stones.cpp: In function 'int main()':
stones.cpp:59:73: warning: suggest parentheses around '&&' within '||' [-Wparentheses]
   59 |                 if ((i == n-1 && (m-1)/2 >= 1) || cct[j]+1 < n-cct[j]-1 && num){
      |                                                   ~~~~~~~~~~~~~~~~~~~~~~^~~~~~
stones.cpp:8:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
    8 |     scanf("%d",&tc);
      |     ~~~~~^~~~~~~~~~
stones.cpp:11:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   11 |         scanf("%d%d",&n,&m);
      |         ~~~~~^~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 256 KB Output is correct
2 Correct 0 ms 380 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 384 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 256 KB Output is correct
2 Correct 0 ms 380 KB Output is correct
3 Correct 2 ms 384 KB Output is correct
4 Incorrect 3 ms 512 KB Wrong answer in test 18 4: 18 < 19
# 결과 실행 시간 메모리 Grader output
1 Correct 63 ms 1784 KB Output is correct
2 Correct 56 ms 4728 KB Output is correct
3 Correct 57 ms 4860 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 59 ms 1912 KB in the table A+B is not equal to 89
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 256 KB Output is correct
2 Correct 0 ms 380 KB Output is correct
3 Correct 2 ms 384 KB Output is correct
4 Incorrect 3 ms 512 KB Wrong answer in test 18 4: 18 < 19