답안 #672432

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
672432 2022-12-16T05:09:04 Z Alihan_8 Red-blue table (IZhO19_stones) C++17
100 / 100
86 ms 3296 KB
#include <bits/stdc++.h>
// include <ext/pb_ds/assoc_container.hpp>
// include <ext/pb_ds/tree_policy.hpp>
// using namespace __gnu_pbds;
using namespace std;
#define all(x) x.begin(), x.end()
#define pb push_back
// define ordered_set tree<int,null_type,less_equal<int>,rb_tree_tag,tree_order_statistics_node_update>
#define mpr make_pair
#define ln '\n'
void IO(string name){freopen((name+".in").c_str(),"r",stdin); freopen((name+".out").c_str(),"w",stdout);}
#define int long long
void solve(){
    int n, m; cin >> n >> m;
    bool rev = false;
    if ( n > m ){
        swap(n, m); rev = true;
    }
    vector <vector<char>> p(n, vector <char> (m, '-'));
    set <pair<int,int>> st;
    for ( int i = 0; i < m; i++ ) st.insert({0, i});
    vector <int> cnt(m, (n+1)/2-1);
    for ( int i = 0; i < n; i++ ){
        int Mx = m/2+1;
        while ( Mx and !st.empty() ){
            auto it = st.begin(); st.erase(st.begin());
            if ( !cnt[it->second] ) continue;
            cnt[it->second]--; Mx--;
            p[i][it->second] = '+';
            st.insert({it->first+1, it->second});
        }
    }
    if ( rev ){
        vector <vector<char>> P(m, vector <char> (n));
        for ( int i = 0; i < n; i++ ){
            for ( int j = m-1; j >= 0; j-- ){
                if ( p[i][j] == '+' ) P[m-1-j][i] = '-';
                else P[m-1-j][i] = '+';
            }
        }
        swap(n, m);
        p = P;
    }
    int score = 0;
    for ( int i = 0; i < n; i++ ){
        int l = 0, r = 0;
        for ( auto j: p[i] ){
            if ( j == '+' ) l++;
            else r++;
        }
        score += l > r;
    }
    for ( int i = 0; i < m; i++ ){
        int l = 0, r = 0;
        for ( int j = 0; j < n; j++ ){
            if ( p[j][i] == '+' ) l++;
            else r++;
        }
        score += r > l;
    }
    cout << score << ln;
    for ( auto i: p ){
        for ( auto j: i ) cout << j;
        cout << ln;
    }
}
signed main(){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int T; cin >> T;
    while ( T-- ){
        solve();
    }

    cout << '\n';
}

Compilation message

stones.cpp: In function 'void IO(std::string)':
stones.cpp:11:29: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   11 | void IO(string name){freopen((name+".in").c_str(),"r",stdin); freopen((name+".out").c_str(),"w",stdout);}
      |                      ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
stones.cpp:11:70: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   11 | void IO(string name){freopen((name+".in").c_str(),"r",stdin); freopen((name+".out").c_str(),"w",stdout);}
      |                                                               ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 3 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 3 ms 340 KB Output is correct
4 Correct 5 ms 340 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 74 ms 1340 KB Output is correct
2 Correct 64 ms 1944 KB Output is correct
3 Correct 68 ms 3296 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 86 ms 1284 KB Output is correct
2 Correct 56 ms 1392 KB Output is correct
3 Correct 51 ms 1376 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 212 KB Output is correct
2 Correct 0 ms 212 KB Output is correct
3 Correct 3 ms 340 KB Output is correct
4 Correct 5 ms 340 KB Output is correct
5 Correct 74 ms 1340 KB Output is correct
6 Correct 64 ms 1944 KB Output is correct
7 Correct 68 ms 3296 KB Output is correct
8 Correct 86 ms 1284 KB Output is correct
9 Correct 56 ms 1392 KB Output is correct
10 Correct 51 ms 1376 KB Output is correct
11 Correct 20 ms 560 KB Output is correct
12 Correct 68 ms 2452 KB Output is correct
13 Correct 74 ms 1848 KB Output is correct
14 Correct 56 ms 1232 KB Output is correct
15 Correct 69 ms 2292 KB Output is correct
16 Correct 51 ms 1776 KB Output is correct
17 Correct 25 ms 1588 KB Output is correct