Submission #1501288


Source Code Expand

#include "bits/stdc++.h"
#include <regex>
#define _USE_MATH_DEFINES
#include <math.h>

using namespace std;

#ifndef _DEBUG
#define main_ main
#endif
#define FOR(i,s,e) for (int i = int(s); i < int(e); ++i)
#define REP(i,e) FOR(i,0,e)
#define INF (INT_MAX/2)
#define EPS (1.0e-8)
#define LINF (LONG_MAX/2)

typedef long long ll;
typedef unsigned long long ull;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<ll> vl;
typedef vector<vl> vvl;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<bool> vb;
typedef vector<string> vs;

template <typename T>
using keyVal = pair<string, T>;
template<typename T>
bool val_greater(const keyVal<T>& left, const keyVal<T>& right) {
	return left.second > right.second;
}

vs split(string str, char sep) {
	vs v; stringstream ss(str); string t;
	while (getline(ss, t, sep)) v.push_back(t);
	return v;
}

void init_global() {}

const ll MOD = 1e9 + 7;

ll pow_mod(ll a, ll n, ll mod) {
	ll res = 1;
	while (n > 0) {
		if (n & 0x01) {
			res *= a;
			res %= mod;
		}
		a = a*a;
		a %= mod;
		n >>= 1;
	}
	return res;
}

ll combi_mod(ll n, ll k, ll mod=MOD) {
	if (n<0 || k<0 || n < k) return 0;
	if (k == 0) return 1;
	if (k == 1) return n%mod;

	ll nume = 1, denom = 1;
	FOR(i, 1, k + 1) {
		nume *= i;
		nume %= mod;
		denom *= i;
		denom %= mod;
	}
	nume %= mod;
	denom %= mod;
	FOR(i, 1, n - k + 1) {
		nume *= k + i;
		nume %= mod;
		denom *= i;
		denom %= mod;
	}
	nume %= mod;
	denom %= mod;

	ll res = nume * pow_mod(denom, mod - 2, mod);
	res %= mod;
	return res;
}

int main_() {
	cin.tie(0);
	ios::sync_with_stdio(false);

	int R, C; cin >> R >> C;
	int X, Y; cin >> X >> Y;
	int D, L; cin >> D >> L;
	
	if (X*Y == D + L) {
		ll ans = combi_mod(X*Y, D);
		ans *= (R - X + 1) * (C - Y + 1);
		ans %= MOD;
		cout << ans << endl;
		return 0;
	}

	ll all = combi_mod(X*Y, D + L);

	ll l = combi_mod((X - 1)*Y, D + L);
	ll r = l;
	ll t = combi_mod(X*(Y - 1), D + L);
	ll b = t;

	ll lt = combi_mod((X - 1)*(Y - 1), D + L);
	ll lb = lt;
	ll rt = lt;
	ll rb = lt;
	ll lr = combi_mod((X - 2)*Y, D + L);
	ll tb = combi_mod(X*(Y - 2), D + L);

	ll lrt = combi_mod((X - 2)*(Y - 1), D + L);
	ll lrb = lrt;
	ll ltb = combi_mod((X - 1)*(Y - 2), D + L);
	ll rtb = ltb;

	ll lrtb = combi_mod((X - 2)*(Y - 2), D + L);

	ll l_r_t_b = l+r+t+b
		- lt - lb - rt- rb - lr - tb
		+ lrt + lrb + ltb + rtb
		- lrtb;
	ll ans = all - l_r_t_b;
	while (ans < 0) ans += MOD;
	ans %= MOD;

	ll num = combi_mod(D + L, L);
	ans *= num;
	ans %= MOD;

	ans *= (R - X + 1) * (C - Y + 1);
	ans %= MOD;

	cout << ans << endl;
	return 0;
}

Submission Info

Submission Time
Task D - AtCoder社の冬
User apprec
Language C++14 (GCC 5.4.1)
Score 101
Code Size 2721 Byte
Status AC
Exec Time 1 ms
Memory 256 KB

Judge Result

Set Name sub All
Score / Max Score 100 / 100 1 / 1
Status
AC × 25
AC × 52
Set Name Test Cases
sub 00_sample_01E.txt, 00_sample_02E.txt, 00_sample_03E.txt, test_03E.txt, test_04E.txt, test_07E.txt, test_08E.txt, test_11E.txt, test_12E.txt, test_15E.txt, test_16E.txt, test_19E.txt, test_20E.txt, test_23E.txt, test_24E.txt, test_27E.txt, test_28E.txt, test_31E.txt, test_32E.txt, test_36E.txt, test_37E.txt, test_38E.txt, test_39E.txt, test_45E.txt, test_47E.txt
All 00_sample_01E.txt, 00_sample_02E.txt, 00_sample_03E.txt, 00_sample_04.txt, test_01.txt, test_02.txt, test_03E.txt, test_04E.txt, test_05.txt, test_06.txt, test_07E.txt, test_08E.txt, test_09.txt, test_10.txt, test_11E.txt, test_12E.txt, test_13.txt, test_14.txt, test_15E.txt, test_16E.txt, test_17.txt, test_18.txt, test_19E.txt, test_20E.txt, test_21.txt, test_22.txt, test_23E.txt, test_24E.txt, test_25.txt, test_26.txt, test_27E.txt, test_28E.txt, test_29.txt, test_30.txt, test_31E.txt, test_32E.txt, test_33.txt, test_34.txt, test_35.txt, test_36E.txt, test_37E.txt, test_38E.txt, test_39E.txt, test_40.txt, test_41.txt, test_42.txt, test_43.txt, test_44.txt, test_45E.txt, test_46.txt, test_47E.txt, test_48.txt
Case Name Status Exec Time Memory
00_sample_01E.txt AC 1 ms 256 KB
00_sample_02E.txt AC 1 ms 256 KB
00_sample_03E.txt AC 1 ms 256 KB
00_sample_04.txt AC 1 ms 256 KB
test_01.txt AC 1 ms 256 KB
test_02.txt AC 1 ms 256 KB
test_03E.txt AC 1 ms 256 KB
test_04E.txt AC 1 ms 256 KB
test_05.txt AC 1 ms 256 KB
test_06.txt AC 1 ms 256 KB
test_07E.txt AC 1 ms 256 KB
test_08E.txt AC 1 ms 256 KB
test_09.txt AC 1 ms 256 KB
test_10.txt AC 1 ms 256 KB
test_11E.txt AC 1 ms 256 KB
test_12E.txt AC 1 ms 256 KB
test_13.txt AC 1 ms 256 KB
test_14.txt AC 1 ms 256 KB
test_15E.txt AC 1 ms 256 KB
test_16E.txt AC 1 ms 256 KB
test_17.txt AC 1 ms 256 KB
test_18.txt AC 1 ms 256 KB
test_19E.txt AC 1 ms 256 KB
test_20E.txt AC 1 ms 256 KB
test_21.txt AC 1 ms 256 KB
test_22.txt AC 1 ms 256 KB
test_23E.txt AC 1 ms 256 KB
test_24E.txt AC 1 ms 256 KB
test_25.txt AC 1 ms 256 KB
test_26.txt AC 1 ms 256 KB
test_27E.txt AC 1 ms 256 KB
test_28E.txt AC 1 ms 256 KB
test_29.txt AC 1 ms 256 KB
test_30.txt AC 1 ms 256 KB
test_31E.txt AC 1 ms 256 KB
test_32E.txt AC 1 ms 256 KB
test_33.txt AC 1 ms 256 KB
test_34.txt AC 1 ms 256 KB
test_35.txt AC 1 ms 256 KB
test_36E.txt AC 1 ms 256 KB
test_37E.txt AC 1 ms 256 KB
test_38E.txt AC 1 ms 256 KB
test_39E.txt AC 1 ms 256 KB
test_40.txt AC 1 ms 256 KB
test_41.txt AC 1 ms 256 KB
test_42.txt AC 1 ms 256 KB
test_43.txt AC 1 ms 256 KB
test_44.txt AC 1 ms 256 KB
test_45E.txt AC 1 ms 256 KB
test_46.txt AC 1 ms 256 KB
test_47E.txt AC 1 ms 256 KB
test_48.txt AC 1 ms 256 KB