Submission #1206345

#TimeUsernameProblemLanguageResultExecution timeMemory
1206345viduxMosaic (IOI24_mosaic)C++17
0 / 100
74 ms11404 KiB
#include <bits/stdc++.h>
using namespace std;

//#define LOCAL

#define FOR(i, n) for (int i = 0; i < n; ++i)
#define REP(i, n, m) for (int i = n; i <= m; ++i)
#define REPR(i, n, m) for (int i = n; i >= m; --i)
#define FORR(x, a) for (auto& x : a)
#define FORR2(x, y, a) for (auto& [x, y] : a)
#define ALL(x) (x).begin(), (x).end()
#define RALL(x) (x).rbegin(), (x).rend()
#define SZ(a) ((int)a.size())

typedef long long ll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;

const int INF = 1e9;
const ll LLINF = 1e18;

std::vector<long long> mosaic(std::vector<int> X, std::vector<int> Y, std::vector<int> T, std::vector<int> B, std::vector<int> L, std::vector<int> R) {
	int q = SZ(T);
	int n = SZ(X);
	vl ans(q);
	/* task 1,2,4
	vvl a(n, vl(n));
	FOR(i, n) a[i][0] = Y[i], a[0][i] = X[i];
	FOR(i, n-1) FOR(j, n-1) {
		int k = a[i][j+1] + a[i+1][j];
		a[i+1][j+1] = (k == 0);
	}
	FORR(r, a) { FORR(x, r) cout << x << " "; cout << endl; }
	vvl pref(n+1, vl(n+1));
	FOR(i, n) FOR(j, n) pref[i+1][j+1] = pref[i+1][j] + pref[i][j+1] - pref[i][j] + a[i][j];
	//FORR(r, pref) { FORR(x, r) cout << x << " "; cout << endl; }
	FOR(t, q) {
		ll sum = pref[B[t]+1][R[t]+1] - pref[T[t]][R[t]+1] - pref[B[t]+1][L[t]] + pref[T[t]][L[t]];
		//cout << sum << endl;
		ans[t] = sum;
		cout << "> " << sum << endl;
	}
	*/
	/* task 3
	vl pref(n+1);
	FOR(i, n) pref[i+1] = pref[i] + X[i];
	FOR(t, q) ans[t] = pref[R[t]+1] - pref[L[t]];
	*/
	FOR(t, q) {
		if ((L[t] == 0 && R[t] == 0) || (T[t] == 0 && B[t] == 0)) {
			ans[t] = 0;
			continue;
		}
		L[t] = max(L[t], 1);
		T[t] = max(T[t], 1);
		ll h = B[t]-T[t]+1;
		ll w = R[t]-L[t]+1;
		//cout << h << " x " << w << endl;
		if (h%2 == 0) ans[t] = w*h/2;
		else {
			ll col1, col2;
			col1 = (h+1)/2, col2 = h/2;
			if ((L[t]+T[t]) % 2 == 1) swap(col1, col2);
			ans[t] = col1 * ((w+1)/2) + col2 * w/2;
			//cout << col1 << " " << col2 << endl;
			//cout << (w+1)/2 << " " << w/2 << endl;
			//cout << col1*((w+1)/2) << " " << col2*w/2 << endl;
		}
	}
	return ans;
}

#ifdef LOCAL
int main() {
	vl ans = mosaic({0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 
					{0, 0, 0},
					{1, 2, 3}, 
					{0, 0, 0}, 
					{1, 2, 4});
	FORR(x, ans) cout << x << endl;

    return 0;
}
#endif
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...