제출 #382204

#제출 시각아이디문제언어결과실행 시간메모리
382204BartolMRed-blue table (IZhO19_stones)C++17
69 / 100
81 ms8684 KiB
#include <bits/stdc++.h>

using namespace std;

#define X first
#define Y second
#define mp make_pair
#define pb push_back
typedef long long ll;
typedef pair <int, int> pii;
typedef pair <int, pii> pip;
typedef pair <pii, int> ppi;
typedef pair <ll, ll> pll;

const int INF=0x3f3f3f3f;
const int N=1005;

int n, m, fl;
int mat[N][N], pom[N][N], red[N], stup[N];

void mali_stup() {
    return;
}

void poseban_4() {
    for (int i=0; i<n; ++i) mat[i][0]=1;
}

void poseb56() {
    for (int i=0; i<n; ++i) {
        for (int j=m/2; j<m; ++j) mat[i][j]=1;
        int j=m/2+i%3;
        mat[i][j]=0;
    }
}

void pos_stup() {
    for (int i=0; i<n; ++i) {
        for (int j=0; j<m/2-!(m%2); ++j) mat[i][j]=1;
    }
}

void reset() {
    for (int i=0; i<n; ++i)
        for (int j=0; j<m; ++j) pom[i][j]=mat[i][j]=0;
}

void rotiraj() {
    for (int i=0; i<n; ++i)
        for (int j=0; j<m; ++j)
            pom[j][n-i-1]=mat[i][j];
    swap(n, m);
    for (int i=0; i<n; ++i)
        for (int j=0; j<m; ++j)
            mat[i][j]=!pom[i][j];
}

void solve() {
    int gr_m=m-1-!(m%2);
    int gr_n=n-1-!(n%2);
    for (int i=0; i<gr_n; ++i) {
        for (int j=i%2; j<gr_m; j+=2) mat[i][j]=1;
    }
    for (int i=gr_n; i<n; ++i) {
        for (int j=0; j<m; ++j) mat[i][j]=1;
    }
}

void ispis() {
    int sol=0;
    for (int j=0; j<m; ++j) stup[j]=0;
    for (int i=0; i<n; ++i) {
        red[i]=0;
        for (int j=0; j<m; ++j) {
            red[i]+=!mat[i][j];
            stup[j]+=mat[i][j];
        }
        sol+=red[i] > m/2;
    }
    for (int j=0; j<m; ++j) sol+=stup[j] > n/2;

    printf("%d\n", sol);
    for (int i=0; i<n; ++i) {
        for (int j=0; j<m; ++j) printf("%c", mat[i][j] ? '-' : '+');
        printf("\n");
    }
}

int main() {
    int t;
    scanf("%d", &t);
    while (t--) {
        scanf("%d %d", &n, &m);

        fl=n<m;
        if (fl) swap(n, m);

        if (m<=2) mali_stup();
        else if (n==4) poseban_4();
        else if (m<=4) pos_stup();
        else if (m<=6) poseb56();
        else if (m>=3) solve();

        if (fl) rotiraj();

        ispis();
        reset();
        if (fl) {
            swap(n, m);
            reset();
        }
    }
    return 0;
}

컴파일 시 표준 에러 (stderr) 메시지

stones.cpp: In function 'int main()':
stones.cpp:91:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   91 |     scanf("%d", &t);
      |     ~~~~~^~~~~~~~~~
stones.cpp:93:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   93 |         scanf("%d %d", &n, &m);
      |         ~~~~~^~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...