답안 #335821

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
335821 2020-12-14T04:06:33 Z beksultan04 Red-blue table (IZhO19_stones) C++14
54 / 100
48 ms 2148 KB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int,int>
#define OK puts("OK");
#define fr first
#define sc second
#define ret return
#define scan1(a) scanf("%lld",&a);
#define scan2(a,b) scanf("%lld %lld",&a, &b);
#define scan3(a,b,c) scanf("%lld %lld %lld",&a,&b,&c);
#define all(s) s.begin(),s.end()
#define pb push_back
#define endi puts("");
const int N = 1e6+12,INF=1e9+7;
int m1[N],p[N];
char q[1001][1001];
main(){
    int t;
    scan1(t)
    while (t--){
        int i,j,n,m,ans=0;
        scan2(n,m)
        if (min(n,m) <= 4){
            if (n <= m){
                for (i=0;i<n;++i){
                    for (j=0;j<m;++j){
                        if (i < n/2+1){
                            q[i][j]='-';
                            m1[j]++;
                        }
                        else {
                            q[i][j]='+';
                            p[i]++;

                        }
                    }
                }
            }
            else {
                for (i=0;i<n;++i){
                    for (j=0;j<m;++j){
                        if (j < m/2+1){
                            q[i][j]='+';
                            p[i]++;
                        }
                        else {
                            m1[j]++;
                            q[i][j]='-';
                        }
                    }
                }
            }
            ans = max(n,m);
            ans += min(n-1,m-1)/2;
            cout <<ans<<"\n";
            for (i=0;i<n;++i){
                for (j=0;j<m;++j){
                    cout <<q[i][j];
                }
                endi;
            }
        }
        else if (min(n,m)<=6){
            if (n <= m){
                int cnt=0;
                for (i=0;i<n;++i){
                    for (j=0;j<m;++j){
                        q[i][j]='-';
                    }
                }
                i=0;
                j=0;
                int mod = m/2+1;
                while (i < (n-1)/2+1){
                    q[i][j]='+';
                    cnt++;
                    j++;
                    j%=m;
                    if (cnt%mod==0)
                        i++;
                    cnt%=mod;
                }
                ans = m;
                ans+=(n-1)/2+1;
                cout <<ans<<"\n";
                for (i=0;i<n;++i){
                    for (j=0;j<m;++j){
                        cout <<q[i][j];
                    }
                    endi;
                }
            }
            else {

                int cnt=0;
                for (i=0;i<n;++i){
                    for (j=0;j<m;++j){
                        q[i][j]='+';
                    }
                }
                i=0;
                j=0;
                int mod = n/2+1;
                while (j < (m-1)/2+1){
                    q[i][j]='-';
                    cnt++;
                    i++;
                    i%=n;
                    if (cnt%mod==0)
                        j++;
                    cnt%=mod;
                }
                ans = n;
                ans+=(m-1)/2+1;
                cout <<ans<<"\n";
                for (i=0;i<n;++i){
                    for (j=0;j<m;++j){
                        cout <<q[i][j];
                    }
                    endi;
                }
            }
        }
        else {
            if (n <= m){
                int cnt=0;
                for (i=0;i<n;++i){
                    for (j=0;j<m;++j){
                        q[i][j]='-';
                    }
                }
                i=0;
                j=0;
                int mod = m/2+1;
                ans = m;
                while (i<n){
                    if (p[j] >= n/2){
                        break;
                    }
                    q[i][j]='+';
                    p[j]++;
                    cnt++;
                    j++;
                    j%=m;
                    if (cnt%mod==0){
                        i++;
                        ans++;
                    }
                    cnt%=mod;
                }
            }
            else {
                int cnt=0;
                for (i=0;i<n;++i){
                    for (j=0;j<m;++j){
                        q[i][j]='+';
                    }
                }
                i=0;
                j=0;
                int mod = n/2+1;
                ans = n;
                while (1){
                    if (p[i] >= m/2){
                        break;
                    }
                    q[i][j]='-';
                    p[i]++;
                    cnt++;
                    i++;
                    i%=n;
                    if (cnt-mod==0){
                        j++;
                        ans++;
                        cnt=0;
                    }
                }
            }
            cout <<ans<<"\n";
            for (i=0;i<n;++i){
                p[i]=0;
                for (j=0;j<m;++j){
                    p[j]=0;
                    cout <<q[i][j];
                }
                endi;
            }
        }
        for (i=0;i<n;++i)p[i]=0;
        for (i=0;i<m;++i)p[i]=0;
    }
}

Compilation message

stones.cpp:18:6: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
   18 | main(){
      |      ^
stones.cpp: In function 'int main()':
stones.cpp:9:23: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
    9 | #define scan1(a) scanf("%lld",&a);
      |                  ~~~~~^~~~~~~~~~~
stones.cpp:20:5: note: in expansion of macro 'scan1'
   20 |     scan1(t)
      |     ^~~~~
stones.cpp:10:25: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   10 | #define scan2(a,b) scanf("%lld %lld",&a, &b);
      |                    ~~~~~^~~~~~~~~~~~~~~~~~~~
stones.cpp:23:9: note: in expansion of macro 'scan2'
   23 |         scan2(n,m)
      |         ^~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 364 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Correct 1 ms 364 KB Output is correct
4 Correct 3 ms 492 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 48 ms 1612 KB Output is correct
2 Correct 44 ms 2028 KB Output is correct
3 Correct 39 ms 2148 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 48 ms 1516 KB in the table A+B is not equal to 46
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 364 KB Output is correct
2 Correct 1 ms 364 KB Output is correct
3 Correct 1 ms 364 KB Output is correct
4 Correct 3 ms 492 KB Output is correct
5 Correct 48 ms 1612 KB Output is correct
6 Correct 44 ms 2028 KB Output is correct
7 Correct 39 ms 2148 KB Output is correct
8 Incorrect 48 ms 1516 KB in the table A+B is not equal to 46
9 Halted 0 ms 0 KB -