답안 #423684

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
423684 2021-06-11T11:21:25 Z amunduzbaev Furniture (JOI20_furniture) C++14
100 / 100
493 ms 16684 KB
/* made by amunduzbaev */
 
//~ #include <ext/pb_ds/assoc_container.hpp>
//~ #include <ext/pb_ds/tree_policy.hpp>
#include "bits/stdc++.h"
 
using namespace std;
//~ using namespace __gnu_pbds;

#define ff first
#define ss second
#define pb push_back
#define mp make_pair
#define ub upper_bound
#define lb lower_bound
#define sz(x) (int)x.size()
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(),x.rend()
#define NeedForSpeed ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define vv vector
#define mem(arr, v) memset(arr, v, sizeof arr)
#define int long long
#define degub(x) cout<<#x<<" : "<<x<<"\n"
#define GG cout<<"here\n";
 
typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii; 
typedef vector<int> vii;
typedef vector<pii> vpii;
template<class T> bool umin(T& a, const T& b) { return a > b ? a = b, true : false; }
template<class T> bool umax(T& a, const T& b) { return a < b ? a = b, true : false; }
template<int sz> using tut = array<int, sz>;
void usaco(string s) { freopen((s+".in").c_str(),"r",stdin);  
	freopen((s+".out").c_str(),"w",stdout); NeedForSpeed }
//~ template<class T> using oset = tree<T, 
//~ null_type, less_equal<T>, rb_tree_tag, 
//~ tree_order_statistics_node_update> ordered_set;
 
const int N = 1e3+5;
const int mod = 1e9+7;
const ll inf = 1e18;
const ld Pi = acos(-1);
 
#define MULTI 0
int n, m, k, s, t, q, ans, res, a[N][N];
int ch[2][2] = {{-1, 1}, {1, -1}};
int cnt[N+N];

void solve(int t_case){
	cin>>n>>m;
	
	for(int i=0;i<=n+1;i++) for(int j=0;j<=m+1;j++) a[i][j] = 1;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++) cin>>a[i][j], cnt[i+j] += !a[i][j];
	
	queue<pii> qq;
	//~ auto check = [&](int i, int j){ return (i >= 1 && i <= n && j >= 1 && j <= m); };
	auto bfs = [&](){
		while(!qq.empty()){
			pii u = qq.front(); qq.pop();
			for(int i=0;i<2;i++){
				pii tt = u; tt.ff += ch[i][0], tt.ss += ch[i][1];
				if(a[tt.ff][tt.ss]){
					if(umax(a[tt.ff][u.ss], 1ll)) cnt[tt.ff+u.ss]--, qq.push({tt.ff, u.ss});
					if(umax(a[u.ff][tt.ss], 1ll)) cnt[u.ff+tt.ss]--, qq.push({u.ff, tt.ss});
				}
			}
		}
	}; 
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(a[i][j]) qq.push({i, j});
		}
	} bfs();
	
	//~ for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) cout<<a[i][j]<<" "; cout<<"\n"; }
	
	cin>>q;
	while(q--){
		int i, j; cin>>i>>j;
		if(a[i][j]) { cout<<1<<"\n"; continue; }
		if(cnt[i+j] == 1) { cout<<0<<"\n"; continue; }
		cnt[i+j]--, a[i][j] = 1, qq.push({i, j}); bfs();
		cout<<1<<"\n";
	}
}

signed main(){
	NeedForSpeed
	if(MULTI){
		int t; cin>>t;
		for(int t_case = 1; t_case <= t; t_case++) solve(t_case);
	} else solve(1);
	return 0;
}

Compilation message

furniture.cpp: In function 'void usaco(std::string)':
furniture.cpp:34:31: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   34 | void usaco(string s) { freopen((s+".in").c_str(),"r",stdin);
      |                        ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
furniture.cpp:35:9: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   35 |  freopen((s+".out").c_str(),"w",stdout); NeedForSpeed }
      |  ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 588 KB Output is correct
2 Correct 2 ms 716 KB Output is correct
3 Correct 3 ms 716 KB Output is correct
4 Correct 4 ms 844 KB Output is correct
5 Correct 4 ms 844 KB Output is correct
6 Correct 4 ms 844 KB Output is correct
7 Correct 4 ms 844 KB Output is correct
8 Correct 4 ms 844 KB Output is correct
9 Correct 4 ms 844 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 588 KB Output is correct
2 Correct 2 ms 716 KB Output is correct
3 Correct 3 ms 716 KB Output is correct
4 Correct 4 ms 844 KB Output is correct
5 Correct 4 ms 844 KB Output is correct
6 Correct 4 ms 844 KB Output is correct
7 Correct 4 ms 844 KB Output is correct
8 Correct 4 ms 844 KB Output is correct
9 Correct 4 ms 844 KB Output is correct
10 Correct 13 ms 1228 KB Output is correct
11 Correct 3 ms 588 KB Output is correct
12 Correct 205 ms 13156 KB Output is correct
13 Correct 84 ms 11460 KB Output is correct
14 Correct 409 ms 16640 KB Output is correct
15 Correct 369 ms 15812 KB Output is correct
16 Correct 407 ms 16160 KB Output is correct
17 Correct 423 ms 16452 KB Output is correct
18 Correct 384 ms 16356 KB Output is correct
19 Correct 493 ms 16572 KB Output is correct
20 Correct 368 ms 16580 KB Output is correct
21 Correct 453 ms 16684 KB Output is correct