Submission #1679951
Source Code Expand
// need
#include <iostream>
#include <algorithm>
// data structure
#include <bitset>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <utility>
#include <vector>
#include <array>
//#include <unordered_map>
#include <complex>
//#include <deque>
#include <valarray>
// stream
//#include <istream>
//#include <sstream>
//#include <ostream>
//#include <fstream>
// etc
#include <cassert>
#include <cmath>
#include <functional>
#include <iomanip>
#include <chrono>
#include <random>
#include <numeric>
// input
#define INIT std::ios::sync_with_stdio(false);std::cin.tie(0);
#define VAR(type, ...)type __VA_ARGS__;MACRO_VAR_Scan(__VA_ARGS__);
template<typename T> void MACRO_VAR_Scan(T& t) { std::cin >> t; }
template<typename First, typename...Rest>void MACRO_VAR_Scan(First& first, Rest&...rest) { std::cin >> first; MACRO_VAR_Scan(rest...); }
#define VEC_ROW(type, n, ...)std::vector<type> __VA_ARGS__;MACRO_VEC_ROW_Init(n, __VA_ARGS__); for(int i=0; i<n; ++i){MACRO_VEC_ROW_Scan(i, __VA_ARGS__);}
template<typename T> void MACRO_VEC_ROW_Init(int n, T& t) { t.resize(n); }
template<typename First, typename...Rest>void MACRO_VEC_ROW_Init(int n, First& first, Rest&...rest) { first.resize(n); MACRO_VEC_ROW_Init(n, rest...); }
template<typename T> void MACRO_VEC_ROW_Scan(int p, T& t) { std::cin >> t[p]; }
template<typename First, typename...Rest>void MACRO_VEC_ROW_Scan(int p, First& first, Rest&...rest) { std::cin >> first[p]; MACRO_VEC_ROW_Scan(p, rest...); }
#define VEC(type, c, n) std::vector<type> c(n);for(auto& i:c)std::cin>>i;
#define MAT(type, c, m, n) std::vector<std::vector<type>> c(m, std::vector<type>(n));for(auto& r:c)for(auto& i:r)std::cin>>i;
// output
#define OUT(d) std::cout<<d;
#define FOUT(n, d) std::cout<<std::fixed<<std::setprecision(n)<<d;
#define SOUT(n, c, d) std::cout<<std::setw(n)<<std::setfill(c)<<d;
#define SP std::cout<<" ";
#define TAB std::cout<<"\t";
#define BR std::cout<<"\n";
#define SPBR(i, n) std::cout<<(i + 1 == n ? '\n' : ' ');
#define ENDL std::cout<<std::endl;
#define FLUSH std::cout<<std::flush;
#define SHOW(d) {std::cerr << #d << "\t:" << d << "\n";}
#define SHOWVECTOR(v) {std::cerr << #v << "\t:";for(const auto& xxx : v){std::cerr << xxx << " ";}std::cerr << "\n";}
#define SHOWVECTOR2(v) {std::cerr << #v << "\t:\n";for(const auto& xxx : v){for(const auto& yyy : xxx){std::cerr << yyy << " ";}std::cerr << "\n";}}
#define SHOWQUEUE(a) {auto tmp(a);std::cerr << #a << "\t:";while(!tmp.empty()){std::cerr << tmp.front() << " ";tmp.pop();}std::cerr << "\n";}
// utility
#define ALL(a) (a).begin(),(a).end()
#define FOR(i, a, b) for(int i=(a);i<(b);++i)
#define RFOR(i, a, b) for(int i=(b)-1;i>=(a);--i)
#define REP(i, n) for(int i=0;i<int(n);++i)
#define RREP(i, n) for(int i=int(n)-1;i>=0;--i)
#define FORLL(i, a, b) for(ll i=ll(a);i<ll(b);++i)
#define RFORLL(i, a, b) for(ll i=ll(b)-1;i>=ll(a);--i)
#define REPLL(i, n) for(ll i=0;i<ll(n);++i)
#define RREPLL(i, n) for(ll i=ll(n)-1;i>=0;--i)
#define IN(a, x, b) (a<=x && x<b)
template<typename T> inline T CHMAX(T& a, const T b) { return a = (a < b) ? b : a; }
template<typename T> inline T CHMIN(T& a, const T b) { return a = (a > b) ? b : a; }
#define EXCEPTION(msg) throw std::string("Exception : " msg " [ in ") + __func__ + " : " + std::to_string(__LINE__) + " lines ]"
#define TRY(cond, msg) try {if (cond) EXCEPTION(msg);}catch (std::string s) {std::cerr << s << std::endl;}
void CHECKTIME(std::function<void()> f) { auto start = std::chrono::system_clock::now(); f(); auto end = std::chrono::system_clock::now(); auto res = std::chrono::duration_cast<std::chrono::nanoseconds>((end - start)).count(); std::cerr << "[Time:" << res << "ns (" << res / (1.0e9) << "s)]\n"; }
// test
template<class T> std::vector<std::vector<T>> VV(int n) {
return std::vector<std::vector<T>>(n);
}
template<class T> std::vector<std::vector<T>> VV(int n, int m, T init = T()) {
return std::vector<std::vector<T>>(n, std::vector<T>(m, init));
}
template<typename S, typename T>
std::ostream& operator<<(std::ostream& os, std::pair<S, T> p) {
os << "(" << p.first << ", " << p.second << ")"; return os;
}
// type/const
#define int ll
using ll = long long;
using ull = unsigned long long;
using ld = long double;
using PAIR = std::pair<int, int>;
using PAIRLL = std::pair<ll, ll>;
constexpr int INFINT = 1 << 30; // 1.07x10^ 9
constexpr int INFINT_LIM = (1LL << 31) - 1; // 2.15x10^ 9
constexpr ll INFLL = 1LL << 60; // 1.15x10^18
constexpr ll INFLL_LIM = (1LL << 62) - 1 + (1LL << 62); // 9.22x10^18
constexpr double EPS = 1e-7;
constexpr int MOD = 1000000007;
constexpr double PI = 3.141592653589793238462643383279;
ll powMod(ll n, ll p, ll mod) {
ll res = 1;
while (p) {
if (p & 1) res *= n, res %= mod;
n *= n; n %= mod;
p >>= 1;
}
return res;
}
ll invMod(ll n, ll mod) {
return powMod(n, MOD - 2, MOD);
}
const signed FACT_MAX_N = 1000006;
signed fact[FACT_MAX_N];
signed factInv[FACT_MAX_N];
struct INIT_FACT {
INIT_FACT() {
fact[0] = 1;
for (int i = 1; i < FACT_MAX_N; ++i) fact[i] = (long long)i * fact[i - 1] % MOD;
factInv[FACT_MAX_N - 1] = powMod(fact[FACT_MAX_N - 1], MOD - 2, MOD);
for (int i = FACT_MAX_N - 2; i >= 0; --i) {
factInv[i] = (long long)(i + 1) * factInv[i + 1] % MOD;
}
}
} init_fact;
signed main() {
INIT;
VAR(int, n, x, y);
VEC_ROW(int, n, c, w);
std::map<int, std::vector<int>> map;
REP(i, n) {
map[c[i]].emplace_back(w[i]);
}
std::vector<PAIR> pv;
for (auto& v : map) {
std::sort(ALL(v.second));
pv.emplace_back(PAIR(v.second[0], v.first));
}
int m = pv.size();
std::sort(ALL(pv));
std::vector<std::vector<int>> a(m);
std::vector<int> ccnt(m, 1);
std::map<int, std::map<int, bool>> checked;
REP(i, m) {
a[i] = map[pv[i].second];
FOR(j, 1, a[i].size()) {
if (a[i][0] + a[i][j] <= x) ++ccnt[i];
}
}
checked[0][0];
int ans = 1;
FOR(i, 1, m) {
if (a[0][0] + a[i][0] > y) break;
(ans *= factInv[ccnt[i]]) %= MOD;
REP(j, a[i].size()) {
if (a[0][0] + a[i][j] <= y || a[i][0] + a[i][j] <= x) checked[i][j];
}
}
if (a.size() >= 2 && a[0][0] + a[1][0] <= y) {
(ans *= factInv[ccnt[0]]) %= MOD;
REP(j, a[0].size()) {
if (a[1][0] + a[0][j] <= y || a[0][0] + a[0][j] <= x) checked[0][j];
}
}
int cnt = 0;
for (const auto& m1 : checked) {
for (const auto& m2 : m1.second) ++cnt;
}
(ans *= fact[cnt]) %= MOD;
OUT(ans)BR;
return 0;
}
Submission Info
Submission Time |
|
Task |
D - Colorful Balls |
User |
satanic0258 |
Language |
C++14 (GCC 5.4.1) |
Score |
0 |
Code Size |
6630 Byte |
Status |
WA |
Exec Time |
313 ms |
Memory |
60012 KB |
Judge Result
Set Name |
Sample |
All |
Score / Max Score |
0 / 0 |
0 / 1000 |
Status |
|
|
Set Name |
Test Cases |
Sample |
00_example_01.txt, 00_example_02.txt, 00_example_03.txt |
All |
00_example_01.txt, 00_example_02.txt, 00_example_03.txt, 01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, 15.txt, 16.txt, 17.txt, 18.txt, 19.txt, 20.txt, 21.txt, 22.txt, 23.txt, 24.txt, 25.txt, 26.txt, 27.txt, 28.txt, 29.txt, 30.txt, 31.txt, 32.txt, 33.txt, 34.txt, 35.txt, 36.txt, 37.txt, 38.txt, 39.txt, 40.txt, 41.txt, 42.txt, 43.txt, 44.txt, 45.txt, 46.txt, 47.txt, 48.txt, 49.txt, 50.txt, 51.txt, 52.txt, 53.txt, 54.txt |
Case Name |
Status |
Exec Time |
Memory |
00_example_01.txt |
AC |
15 ms |
8064 KB |
00_example_02.txt |
AC |
15 ms |
8064 KB |
00_example_03.txt |
AC |
15 ms |
8064 KB |
01.txt |
WA |
16 ms |
8192 KB |
02.txt |
WA |
16 ms |
8064 KB |
03.txt |
WA |
20 ms |
9472 KB |
04.txt |
WA |
16 ms |
8064 KB |
05.txt |
WA |
17 ms |
8704 KB |
06.txt |
AC |
16 ms |
8192 KB |
07.txt |
WA |
103 ms |
23928 KB |
08.txt |
AC |
16 ms |
8192 KB |
09.txt |
WA |
39 ms |
13824 KB |
10.txt |
WA |
35 ms |
12672 KB |
11.txt |
WA |
16 ms |
8192 KB |
12.txt |
WA |
16 ms |
8064 KB |
13.txt |
WA |
22 ms |
9984 KB |
14.txt |
WA |
15 ms |
8064 KB |
15.txt |
WA |
54 ms |
18296 KB |
16.txt |
WA |
84 ms |
20468 KB |
17.txt |
WA |
25 ms |
10240 KB |
18.txt |
WA |
35 ms |
12160 KB |
19.txt |
WA |
59 ms |
16384 KB |
20.txt |
AC |
249 ms |
48624 KB |
21.txt |
WA |
246 ms |
47600 KB |
22.txt |
AC |
224 ms |
40048 KB |
23.txt |
WA |
282 ms |
56048 KB |
24.txt |
WA |
227 ms |
39920 KB |
25.txt |
AC |
275 ms |
48240 KB |
26.txt |
WA |
279 ms |
57072 KB |
27.txt |
AC |
229 ms |
35184 KB |
28.txt |
WA |
298 ms |
57200 KB |
29.txt |
AC |
278 ms |
53104 KB |
30.txt |
WA |
223 ms |
37360 KB |
31.txt |
WA |
287 ms |
57328 KB |
32.txt |
AC |
271 ms |
41584 KB |
33.txt |
WA |
304 ms |
56560 KB |
34.txt |
AC |
260 ms |
51444 KB |
35.txt |
WA |
96 ms |
24832 KB |
36.txt |
AC |
138 ms |
29948 KB |
37.txt |
WA |
94 ms |
25088 KB |
38.txt |
WA |
92 ms |
24320 KB |
39.txt |
AC |
98 ms |
25088 KB |
40.txt |
AC |
277 ms |
57584 KB |
41.txt |
AC |
313 ms |
52716 KB |
42.txt |
WA |
278 ms |
51304 KB |
43.txt |
AC |
265 ms |
42604 KB |
44.txt |
WA |
304 ms |
60012 KB |
45.txt |
WA |
262 ms |
43628 KB |
46.txt |
AC |
282 ms |
51180 KB |
47.txt |
AC |
64 ms |
14448 KB |
48.txt |
AC |
65 ms |
14448 KB |
49.txt |
AC |
65 ms |
14448 KB |
50.txt |
WA |
201 ms |
44144 KB |
51.txt |
WA |
186 ms |
37744 KB |
52.txt |
WA |
107 ms |
22132 KB |
53.txt |
WA |
107 ms |
22132 KB |
54.txt |
WA |
105 ms |
22132 KB |