Submission #4084774


Source Code Expand

#if 0
cat <<EOF >mistaken-paste
#endif
// thanks for @rsk0315_h4x

#pragma GCC diagnostic ignored "-Wincompatible-pointer-types"
#define _USE_MATH_DEFINES

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include <math.h>
#include <time.h>

#define BIG 2000000007
#define VERYBIG 2000000000000007LL

#define MOD 1000000007
#define FOD  998244353
typedef uint64_t ull;
typedef  int64_t sll;

#define N_MAX 1000000

#ifdef __cplusplus
#include <queue>
#include <stack>
#include <tuple>
#include <set>
#include <map>
#include <string>
#include <algorithm>
#include <functional>
#include <array>

using std::queue;
using std::priority_queue;
using std::stack;
using std::tuple;
using std::set;
using std::map;
using std::vector;
using std::greater;
using std::pair;
using std::string;
using std::get;

template <typename T, typename U>
pair<T, U> operator+(pair<T, U> l, pair<T, U> r) {
	return pair<T, U>(l.first + r.first, l.second + r.second);
}

#endif

typedef struct {
	int32_t a;
	int32_t b;
} hw;

typedef struct {
	sll a;
	sll b;
} hwll;

typedef struct {
	sll a;
	sll b;
	sll c;
} hwllc;

typedef struct {
	hwll a;
	hwll b;
} linell;

ull n, m;
ull h, w;
ull k;
ull q;
sll va, vb, vc, vd, ve, vf;
ull ua, ub, uc, ud, ue, uf;
long double vra, vrb, vrc;
double vda, vdb, vdc;
char ch, dh;

ull umin (ull x, ull y) {
	return (x < y) ? x : y;
}

ull umax (ull x, ull y) {
	return (x > y) ? x : y;
}

sll smin (sll x, sll y) {
	return (x < y) ? x : y;
}

sll smax (sll x, sll y) {
	return (x > y) ? x : y;
}

ull gcd (ull x, ull y) {
	if (x < y) {
		return gcd(y, x);
	} else if (y == 0) {
		return x;
	} else {
		return gcd(y, x % y);
	}
}

ull bitpow (ull a, ull x, ull modulo) {
	ull result = 1;
	while (x) {
		if (x & 1) {
			result *= a;
			result %= modulo;
		}
		x /= 2;
		a = (a * a) % modulo;
	}
	return result;
}

ull divide (ull a, ull b, ull modulo) {
	return (a * bitpow(b, modulo - 2, modulo)) % modulo;
}

ull udiff (ull a, ull b) {
	if (a >= b) {
		return a - b;
	} else {
		return b - a;
	}
}

sll sdiff (sll a, sll b) {
	if (a >= b) {
		return a - b;
	} else {
		return b - a;
	}
}

int bitcount (ull n) {
	int result = 0;
	while (n) {
		if (n & 1) result++;
		n /= 2;
	}
	return result;
}

#define BEGCMP(NAME) int32_t NAME (const void *left, const void *right)
#define DEFLR(TYPE) TYPE l=*(TYPE*)left,r=*(TYPE*)right
#define CMPRET(L, R) if((L)<(R))return-1;if((L)>(R))return+1

// int32_t pullcomp (const void *left, const void *right) {
// 	ull l = *(ull*)left;
// 	ull r = *(ull*)right;
// 	if (l < r) {
// 		return -1;
// 	}
// 	if (l > r) {
// 		return +1;
// 	}
// 	return 0;
// }
BEGCMP(pullcomp){
	DEFLR(ull);
	CMPRET(l, r);
	return 0;
}
BEGCMP(prevcomp){
	DEFLR(ull);
	CMPRET(r, l);
	return 0;
}
BEGCMP(psllcomp){
	DEFLR(sll);
	CMPRET(l, r);
	return 0;
}
BEGCMP(pcharcomp){
	DEFLR(char);
	CMPRET(l, r);
	return 0;
}
BEGCMP(pdoublecomp){
	DEFLR(double);
	CMPRET(l, r);
	return 0;
}

int32_t pstrcomp (const void *left, const void *right) {
	char* l = *(char**)left;
	char* r = *(char**)right;

	return strcmp(l, r);
}

BEGCMP(phwllABcomp){
	DEFLR(hwll);
	CMPRET(l.a, r.a);
	CMPRET(l.b, r.b);
	return 0;
}
BEGCMP(phwllREVcomp){
	DEFLR(hwll);
	CMPRET(l.b, r.b);
	CMPRET(l.a, r.a);
	return 0;
}
BEGCMP(ptriplecomp){
	DEFLR(hwllc);
	CMPRET(l.a, r.a);
	CMPRET(l.b, r.b);
	CMPRET(l.c, r.c);
	return 0;
}
BEGCMP(ptripleREVcomp){
	DEFLR(hwllc);
	CMPRET(l.b, r.b);
	CMPRET(l.a, r.a);
	CMPRET(l.c, r.c);
	return 0;
}

int32_t pquadcomp (const void *left, const void *right) {
	linell l = *(linell*)left;
	linell r = *(linell*)right;

	sll ac = phwllABcomp(&(l.a), &(r.a));
	if (ac) return ac;
	sll bc = phwllABcomp(&(l.b), &(r.b));
	if (bc) return bc;

	return 0;
}

bool isinrange (sll left, sll x, sll right) {
	return (left <= x && x <= right);
}

bool isinrange_soft (sll left, sll x, sll right) {
	return (left <= x && x <= right) || (left >= x && x >= right);
}

sll a[N_MAX + 5];
// ull a[N_MAX + 5];
// sll a[3001][3001];
sll b[N_MAX + 5];
// ull b[N_MAX + 5];
// sll b[3001][3001];
sll c[N_MAX + 5];
ull d[N_MAX + 5];
sll e[N_MAX];
char s[N_MAX + 1];
// char s[3010][3010];
char t[N_MAX + 1];
// char t[3010][3010];
char u[N_MAX + 1];
hwll xy[N_MAX + 5];
hwllc tup[N_MAX + 5];
sll table[3005][3005];
// here we go

ull ncr[5006][5006];

ull solve () {
	sll i, j, ki, li;
	// ull result = 0;
	sll result = 0;
	double dresult = 0;
	// ull maybe = 0;
	sll maybe = 0;
	// ull sum = 0;
	sll sum = 0;
	sll item;
	ull *dpcell;

	if (ub % 2) goto fail;

	ncr[0][0] = 1;
	for (i = 1; i <= n; i++) {
		for (j = 0; j <= i; j++) {
			if (j) ncr[i][j] += ncr[i - 1][j - 1];
			if (j < i) ncr[i][j] += ncr[i - 1][j];
			ncr[i][j] %= MOD;
		}
	}

	for (i = 0; i * 3 <= uc; i++) {
		ull x = ncr[ua + ub / 2 + i][i];
		ull y = 0;
		sll s = uc - i * 3;
		if (!ub) {
			if (s <= ua) y = ncr[ua][uc - i * 3];
		} else for (j = 0; j <= ua; j++) {
			ull t = s + ub / 2 - 1;
			if (s < j) break;
			y += ncr[ua][j] * ncr[t - j][ub / 2 - 1] % MOD;
		}
		y %= MOD;
		result += x * y % MOD;
	}
	result %= MOD;
	result = (result * ncr[ua + ub / 2][ua]) % MOD;

	printf("%lld\n", result);
	// printf("%.15lf\n", dresult);
	// puts(s);

	return 0;

	success:
	// puts("YES");
	puts("Yes");
	// printf("%llu\n", result);
	// puts("0");
	// puts("Yay!");
	return 0;

	fail:
	// puts("NO");
	// puts("No");
	puts("0");
	// puts("-1");
	// puts("-1 -1 -1");
	// puts("Impossible");
	return 1;
}

int32_t main (void) {
	int32_t i, j;
	int32_t x, y;

	n = 3;

	// scanf("%llu%llu", &h, &w);
	scanf("%llu", &n, &m);
	// scanf("%llu", &k, &n, &m);
	// scanf("%llu%llu", &h, &w);
	// scanf("%s", s);
	// scanf("%llu", &q);
	// scanf("%lld%lld", &va, &vb, &vc, &vd);
	scanf("%llu%llu%llu", &ua, &ub, &uc, &ud, &ue);
	// scanf("%s", t);
	// scanf("%llu", &k);
	// scanf("%lld", &m);
	// for (i = 0; i < n; i++) {
	// 	// scanf("%lld%lld", &xy[i].a, &xy[i].b);
	// 	// scanf("%lld%lld%lld", &tup[i].a, &tup[i].b, &tup[i].c);
	// 	// scanf("%lld", &a[i]);
	// 	// scanf("%lld", &b[i]);
	// 	scanf("%lld", &c[i]);
	// 	// scanf("%lld", &d[i]);
	// 	// a[i]--;
	// 	// b[i]--;
	// 	// c[i]--;
	// 	// d[i]--;
	// 	// xy[i].a--;
	// 	// xy[i].b--;
	// 	// tup[i].a--;
	// 	// tup[i].b--;
	// }
	// for (i = 0; i < m; i++) {
	// 	scanf("%lld%lld", &a[i], &b[i]);
	// 	a[i]--;
	// 	b[i]--;
	// }
	// for (i = 1; i <= n; i++) {
	// 	scanf("%llu", &d[i]);
	// }
	// for (i = 0; i < n; i++) {
	// 	scanf("%lld%lld%lld", &c[i], &a[i], &b[i]);
	// }

	// for (i = 0; i < q; i++) {
	// 	// scanf("%lld%lld", &xy[i].a, &xy[i].b);
	// 	scanf("%lld", &c[i]);
	// 	// xy[i].a--;
	// 	// xy[i].b--;
	// }

	// for (i = 0; i < n; i++) {
	// 	for (j = 0; j < n; j++) {
	// 		scanf("%lld", &table[i][j]);
	// 		// table[i][j]--;
	// 	}
	// }
	// for (i = 0; i < h; i++) {
	// 	scanf("%s", s[i]);
	// }
	// scanf("%llu", &q);

	solve();

	return 0;
}

Submission Info

Submission Time
Task J - 123 Pairs
User sheyasutaka
Language C (GCC 5.4.1)
Score 1500
Code Size 7272 Byte
Status AC
Exec Time 76 ms
Memory 199936 KB

Compile Error

./Main.c: In function ‘solve’:
./Main.c:312:9: warning: format ‘%lld’ expects argument of type ‘long long int’, but argument 2 has type ‘sll {aka long int}’ [-Wformat=]
  printf("%lld\n", result);
         ^
./Main.c: In function ‘main’:
./Main.c:343:8: warning: format ‘%llu’ expects argument of type ‘long long unsigned int *’, but argument 2 has type ‘ull * {aka long unsigned int *}’ [-Wformat=]
  scanf("%llu", &n, &m);
        ^
./Main.c:343:8: warning: too many arguments for format [-Wformat-extra-args]
./Main.c:349:8: warning: format ‘%llu’ expects argument of type ‘long long unsigned int *’, but argument 2 has type ‘ull * {aka long unsigned int *}’ [-Wformat=]
  scanf("%llu%llu%llu", &ua, &ub, &uc, &ud, &ue);
        ^
./Main.c:349:8: warning: format ‘%llu’ expects argument of type ‘long long unsigned int *’, but argument 3 has type ‘ull * {aka long unsigned int *}’ [-Wformat=]
./Main.c:349:8: warning: format ‘%llu’ expects argument of type ‘long long unsigned int *’, but argument 4 has type ‘ull * {a...

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 1500 / 1500
Status
AC × 2
AC × 52
Set Name Test Cases
Sample example0.txt, example1.txt
All 000.txt, 001.txt, 002.txt, 003.txt, 004.txt, 005.txt, 006.txt, 007.txt, 008.txt, 009.txt, 010.txt, 011.txt, 012.txt, 013.txt, 014.txt, 015.txt, 016.txt, 017.txt, 018.txt, 019.txt, 020.txt, 021.txt, 022.txt, 023.txt, 024.txt, 025.txt, 026.txt, 027.txt, 028.txt, 029.txt, 030.txt, 031.txt, 032.txt, 033.txt, 034.txt, 035.txt, 036.txt, 037.txt, 038.txt, 039.txt, 040.txt, 041.txt, 042.txt, 043.txt, 044.txt, 045.txt, 046.txt, 047.txt, 048.txt, 049.txt, example0.txt, example1.txt
Case Name Status Exec Time Memory
000.txt AC 75 ms 199808 KB
001.txt AC 74 ms 199936 KB
002.txt AC 74 ms 199936 KB
003.txt AC 74 ms 199936 KB
004.txt AC 74 ms 199936 KB
005.txt AC 74 ms 199936 KB
006.txt AC 74 ms 199936 KB
007.txt AC 74 ms 199936 KB
008.txt AC 74 ms 199936 KB
009.txt AC 74 ms 199936 KB
010.txt AC 73 ms 198912 KB
011.txt AC 73 ms 198784 KB
012.txt AC 73 ms 198784 KB
013.txt AC 8 ms 32896 KB
014.txt AC 9 ms 34944 KB
015.txt AC 69 ms 188544 KB
016.txt AC 19 ms 65792 KB
017.txt AC 40 ms 120960 KB
018.txt AC 17 ms 61568 KB
019.txt AC 46 ms 137344 KB
020.txt AC 49 ms 145536 KB
021.txt AC 74 ms 198784 KB
022.txt AC 63 ms 176256 KB
023.txt AC 74 ms 199936 KB
024.txt AC 75 ms 199936 KB
025.txt AC 74 ms 199936 KB
026.txt AC 75 ms 199936 KB
027.txt AC 75 ms 199936 KB
028.txt AC 75 ms 199936 KB
029.txt AC 75 ms 199936 KB
030.txt AC 75 ms 199936 KB
031.txt AC 75 ms 199936 KB
032.txt AC 74 ms 199936 KB
033.txt AC 1 ms 4224 KB
034.txt AC 45 ms 137344 KB
035.txt AC 64 ms 178304 KB
036.txt AC 44 ms 135296 KB
037.txt AC 2 ms 8320 KB
038.txt AC 76 ms 199936 KB
039.txt AC 1 ms 4224 KB
040.txt AC 1 ms 4224 KB
041.txt AC 74 ms 199936 KB
042.txt AC 74 ms 199936 KB
043.txt AC 2 ms 6272 KB
044.txt AC 2 ms 6272 KB
045.txt AC 2 ms 6272 KB
046.txt AC 2 ms 6272 KB
047.txt AC 2 ms 6272 KB
048.txt AC 2 ms 6272 KB
049.txt AC 2 ms 6272 KB
example0.txt AC 2 ms 6272 KB
example1.txt AC 7 ms 28800 KB