Submission #1196474
Source Code Expand
#include <bits/stdc++.h> #define MOD 1000000007 using namespace std; #define rep(i, a, b) for(int i = (a); i < int(b); ++i) #define rrep(i, a, b) for(int i = (a) - 1; i >= int(b); --i) #define trav(it, v) for(typeof((v).begin()) it = (v).begin(); it != (v).end(); ++it) #define all(v) (v).begin(), (v).end() #define what_is(x) cerr << #x << " is " << x << endl; typedef double fl; typedef long long ll; typedef pair<int, int> pii; typedef vector<int> vi; typedef vector<pii> vpi; ll c[200005], w[200005]; ll colorWeight[200005]; ll colorWeight2[200005]; ll colorCount[200005]; ll minWeight; ll powerMod(ll a, ll x){ if(x == 0) return 1; if(x%2) return (a*powerMod((a*a)%MOD, x/2))%MOD; return (powerMod((a*a)%MOD, x/2)); } ll inv(ll a){ return powerMod(a, MOD-2); } ll invfac[200005]; ll fac[200005]; int main(){ invfac[0]=1; fac[0]=1; rep(i,1,200003){ fac[i]=(fac[i-1]*i)%MOD; invfac[i]=(invfac[i-1]*inv(i))%MOD; assert((fac[i]*invfac[i])%MOD == 1); } ll N, X, Y; scanf("%lld%lld%lld", &N, &X, &Y); assert(N <= 200000); assert(X <= 1000000000); assert(Y <= 1000000000); rep(i,0,N+1){ colorWeight[i]=1050000000; minWeight = 1050000000; assert(colorWeight[i] > X && colorWeight[i] > Y); } assert(minWeight > X && minWeight > Y); int minColor=-1; rep(i,0,N){ scanf("%lld%lld", c+i, w+i); assert(c[i] <= N); assert(c[i] >= 1); assert(w[i] <= 1000000000); assert(w[i] >= 1); colorWeight[c[i]] = min(colorWeight[c[i]], w[i]); if(w[i] < minWeight){ minWeight = min(minWeight, w[i]); minColor = c[i]; } } rep(i,0,N+1){ colorWeight2[i]=colorWeight[i]; } sort(colorWeight2, colorWeight2+(N+1)); int minWeight2 = colorWeight2[1]; int movable=0; rep(i,0,N){ int tw = minWeight; if(c[i] == minColor) tw = minWeight2; if(w[i]+colorWeight[c[i]] <= X || w[i]+tw <= Y){ if(colorWeight[c[i]]+minWeight <= Y){ ++colorCount[c[i]]; ++movable; } } } ll ans=fac[movable]; rep(i,0,N+1){ if(!colorCount[i]) continue; ans = (ans*invfac[colorCount[i]])%MOD; } assert(ans >= 0 && ans < MOD); sort(colorWeight, colorWeight+(N+1)); if(colorWeight[0]+colorWeight[1] > Y) cout << "1" << endl; else cout << ans << endl; }
Submission Info
Submission Time | |
---|---|
Task | D - Colorful Balls |
User | Gullesnuffs |
Language | C++14 (GCC 5.4.1) |
Score | 1000 |
Code Size | 2303 Byte |
Status | AC |
Exec Time | 106 ms |
Memory | 11136 KiB |
Compile Error
./Main.cpp: In function ‘int main()’: ./Main.cpp:47:35: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result] scanf("%lld%lld%lld", &N, &X, &Y); ^ ./Main.cpp:59:30: warning: ignoring return value of ‘int scanf(const char*, ...)’, declared with attribute warn_unused_result [-Wunused-result] scanf("%lld%lld", c+i, w+i); ^
Judge Result
Set Name | Sample | All | ||||
---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 1000 / 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 | 44 ms | 10496 KiB |
00_example_02.txt | AC | 44 ms | 10496 KiB |
00_example_03.txt | AC | 44 ms | 10496 KiB |
01.txt | AC | 44 ms | 10496 KiB |
02.txt | AC | 44 ms | 10496 KiB |
03.txt | AC | 46 ms | 10496 KiB |
04.txt | AC | 44 ms | 10496 KiB |
05.txt | AC | 45 ms | 10496 KiB |
06.txt | AC | 44 ms | 10496 KiB |
07.txt | AC | 67 ms | 10496 KiB |
08.txt | AC | 44 ms | 10496 KiB |
09.txt | AC | 55 ms | 10496 KiB |
10.txt | AC | 51 ms | 10496 KiB |
11.txt | AC | 44 ms | 10496 KiB |
12.txt | AC | 44 ms | 10496 KiB |
13.txt | AC | 46 ms | 10496 KiB |
14.txt | AC | 44 ms | 10496 KiB |
15.txt | AC | 55 ms | 10496 KiB |
16.txt | AC | 67 ms | 10496 KiB |
17.txt | AC | 47 ms | 10496 KiB |
18.txt | AC | 52 ms | 10496 KiB |
19.txt | AC | 62 ms | 10496 KiB |
20.txt | AC | 104 ms | 11136 KiB |
21.txt | AC | 102 ms | 11136 KiB |
22.txt | AC | 102 ms | 11136 KiB |
23.txt | AC | 103 ms | 11136 KiB |
24.txt | AC | 104 ms | 11136 KiB |
25.txt | AC | 103 ms | 11136 KiB |
26.txt | AC | 103 ms | 11136 KiB |
27.txt | AC | 103 ms | 11136 KiB |
28.txt | AC | 104 ms | 11136 KiB |
29.txt | AC | 103 ms | 11136 KiB |
30.txt | AC | 103 ms | 11136 KiB |
31.txt | AC | 106 ms | 11136 KiB |
32.txt | AC | 103 ms | 11136 KiB |
33.txt | AC | 103 ms | 11136 KiB |
34.txt | AC | 100 ms | 11136 KiB |
35.txt | AC | 87 ms | 11136 KiB |
36.txt | AC | 91 ms | 11136 KiB |
37.txt | AC | 87 ms | 11136 KiB |
38.txt | AC | 87 ms | 11136 KiB |
39.txt | AC | 86 ms | 11136 KiB |
40.txt | AC | 101 ms | 11136 KiB |
41.txt | AC | 102 ms | 11136 KiB |
42.txt | AC | 102 ms | 11136 KiB |
43.txt | AC | 103 ms | 11136 KiB |
44.txt | AC | 102 ms | 11136 KiB |
45.txt | AC | 101 ms | 11136 KiB |
46.txt | AC | 102 ms | 11136 KiB |
47.txt | AC | 83 ms | 11136 KiB |
48.txt | AC | 84 ms | 11136 KiB |
49.txt | AC | 86 ms | 11136 KiB |
50.txt | AC | 92 ms | 11136 KiB |
51.txt | AC | 92 ms | 11136 KiB |
52.txt | AC | 80 ms | 11136 KiB |
53.txt | AC | 79 ms | 11136 KiB |
54.txt | AC | 79 ms | 11136 KiB |