Submission #21999

# Submission time Handle Problem Language Result Execution time Memory
21999 2017-04-28T17:02:04 Z gs14004 흑백 (kriii4_G) C++11
100 / 100
366 ms 33284 KB
#include <bits/stdc++.h>
using namespace std;
typedef long long lint;
typedef pair<int, int> pi;
const int mod = 1e9 + 7;

lint ipow(lint x, lint p){
	lint ret = 1, piv = x % mod;
	while(p){
		if(p&1) ret *= piv;
		piv *= piv;
		ret %= mod;
		piv %= mod;
		p >>= 1;
	}
	return ret % mod;
}

lint pwr[2000005], ipw[2000005];
lint fact[1005], invf[1005];
int n, m;

lint ncr(int x, int y){
	if(y < 0 || x < y) return 0;
	return fact[x] * (invf[y] * invf[x-y] % mod) % mod;
}

lint solve(int n, int m){
	lint ans = 0;
	for(int i=1; i<=n; i++){
		for(int k=1; k+i<=n; k++){
			ans += (ncr(n, i) * ncr(n-i, k) % mod) * 
				((ipow(ipw[i] + 1, m) - 1) * (ipow(ipw[k] + 1, m) - 1) % mod) % mod;
		}
	}
	return ans;
}

lint solve2(){
	lint ans = 0;
	for(int i=1; i<=n; i++){
		for(int j=1; j+i<=n; j++){
			lint aux = ipow(ipw[j] + 1, m) * (ipow((ipw[i] * ipow(ipw[j] + 1, mod - 2) + 1) % mod, m) + mod - 1) % mod;
			aux -= ipow(ipw[i] + 1, m) - 1;
			aux += mod;
			aux %= mod;
			ans += (ncr(n, i) * ncr(n-i, j) % mod) * aux;
			ans %= mod;
		}
	}
	return ans;
}

int main(){
	cin >> n >> m;
	pwr[0] = ipw[0] = 1;
	for(int i=1; i<=n*m*2; i++){
		pwr[i] = pwr[i-1] * 2 % mod;
		ipw[i] = ipw[i-1] * ((mod + 1) / 2) % mod;
	}
	fact[0] = invf[0] = 1;
	for(int i=1; i<=max(n, m); i++){
		fact[i] = fact[i-1] * i % mod;
		invf[i] = ipow(fact[i], mod-2);
	}
	lint x = solve(n, m) + solve(m, n) - solve2() + mod;
	cout << x % mod;
}
# Verdict Execution time Memory Grader output
1 Correct 0 ms 33284 KB Output is correct
2 Correct 0 ms 33284 KB Output is correct
3 Correct 0 ms 33284 KB Output is correct
4 Correct 0 ms 33284 KB Output is correct
5 Correct 0 ms 33284 KB Output is correct
6 Correct 0 ms 33284 KB Output is correct
7 Correct 0 ms 33284 KB Output is correct
8 Correct 0 ms 33284 KB Output is correct
9 Correct 0 ms 33284 KB Output is correct
10 Correct 0 ms 33284 KB Output is correct
11 Correct 0 ms 33284 KB Output is correct
12 Correct 0 ms 33284 KB Output is correct
13 Correct 0 ms 33284 KB Output is correct
14 Correct 0 ms 33284 KB Output is correct
15 Correct 0 ms 33284 KB Output is correct
16 Correct 0 ms 33284 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 143 ms 33284 KB Output is correct
2 Correct 69 ms 33284 KB Output is correct
3 Correct 276 ms 33284 KB Output is correct
4 Correct 156 ms 33284 KB Output is correct
5 Correct 106 ms 33284 KB Output is correct
6 Correct 86 ms 33284 KB Output is correct
7 Correct 183 ms 33284 KB Output is correct
8 Correct 6 ms 33284 KB Output is correct
9 Correct 33 ms 33284 KB Output is correct
10 Correct 216 ms 33284 KB Output is correct
11 Correct 233 ms 33284 KB Output is correct
12 Correct 166 ms 33284 KB Output is correct
13 Correct 56 ms 33284 KB Output is correct
14 Correct 293 ms 33284 KB Output is correct
15 Correct 113 ms 33284 KB Output is correct
16 Correct 126 ms 33284 KB Output is correct
17 Correct 113 ms 33284 KB Output is correct
18 Correct 126 ms 33284 KB Output is correct
19 Correct 96 ms 33284 KB Output is correct
20 Correct 36 ms 33284 KB Output is correct
21 Correct 359 ms 33284 KB Output is correct
22 Correct 366 ms 33284 KB Output is correct
23 Correct 366 ms 33284 KB Output is correct
24 Correct 366 ms 33284 KB Output is correct