제출 #1001016

#제출 시각아이디문제언어결과실행 시간메모리
1001016GrindMachineRed-blue table (IZhO19_stones)C++17
100 / 100
72 ms3412 KiB
#include <bits/stdc++.h> #include <ext/pb_ds/assoc_container.hpp> #include <ext/pb_ds/tree_policy.hpp> using namespace std; using namespace __gnu_pbds; template<typename T> using Tree = tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>; typedef long long int ll; typedef long double ld; typedef pair<int,int> pii; typedef pair<ll,ll> pll; #define fastio ios_base::sync_with_stdio(false); cin.tie(NULL) #define pb push_back #define endl '\n' #define sz(a) (int)a.size() #define setbits(x) __builtin_popcountll(x) #define ff first #define ss second #define conts continue #define ceil2(x,y) ((x+y-1)/(y)) #define all(a) a.begin(), a.end() #define rall(a) a.rbegin(), a.rend() #define yes cout << "Yes" << endl #define no cout << "No" << endl #define rep(i,n) for(int i = 0; i < n; ++i) #define rep1(i,n) for(int i = 1; i <= n; ++i) #define rev(i,s,e) for(int i = s; i >= e; --i) #define trav(i,a) for(auto &i : a) template<typename T> void amin(T &a, T b) { a = min(a,b); } template<typename T> void amax(T &a, T b) { a = max(a,b); } #ifdef LOCAL #include "debug.h" #else #define debug(...) 42 #endif /* read some accepted submissions a long time ago, didnt understand the idea behind them back then when trying again, realized that we could fix the #of ignored rows and cols, take the best grid over all possible options instead of doing casework */ const int MOD = 1e9 + 7; const int N = 1e3 + 5; const int inf1 = int(1e9) + 5; const ll inf2 = ll(1e18) + 5; char a[N][N], ans[N][N]; void solve(int test_case) { int n,m; cin >> n >> m; int best = -inf1; auto go = [&](){ int cost = 0; rep1(i,n){ int cnt = 0; rep1(j,m){ if(a[i][j] == 'x') cnt++; } if(cnt > m/2) cost++; } rep1(j,m){ int cnt = 0; rep1(i,n){ if(a[i][j] == '.') cnt++; } if(cnt > n/2) cost++; } if(cost > best){ best = cost; rep1(i,n) rep1(j,m) ans[i][j] = a[i][j]; } }; rep(ignore_rows,min(n+1,5)){ rep(ignore_cols,min(m+1,5)){ rep1(i,n) rep1(j,m) a[i][j] = '.'; int ptr = 1; rep1(i,n-ignore_rows){ for(int j = m-ignore_cols+1; j <= m; ++j){ a[i][j] = 'x'; } int need = (m/2+1)-ignore_cols; while(need >= 1){ a[i][ptr] = 'x'; need--; ptr++; if(ptr >= m-ignore_cols+1) ptr = 1; } } go(); } } cout << best << endl; rep1(i,n){ rep1(j,m){ if(ans[i][j] == 'x') cout << '+'; else cout << '-'; } cout << endl; } } int main() { fastio; int t = 1; cin >> t; rep1(i, t) { solve(i); } return 0; }
#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...