| Task: | jedan |
| Sender: | Hansuzu |
| Submission time: | 2016-08-02 16:47:14 +0300 |
| Language: | C++ |
| Status: | READY |
| Result: | 0 |
| group | verdict | score |
|---|---|---|
| #1 | WRONG ANSWER | 0 |
| test | verdict | time | |
|---|---|---|---|
| #1 | ACCEPTED | 0.11 s | details |
| #2 | ACCEPTED | 0.11 s | details |
| #3 | ACCEPTED | 0.10 s | details |
| #4 | ACCEPTED | 0.12 s | details |
| #5 | ACCEPTED | 0.11 s | details |
| #6 | ACCEPTED | 0.12 s | details |
| #7 | ACCEPTED | 0.13 s | details |
| #8 | WRONG ANSWER | 0.11 s | details |
| #9 | WRONG ANSWER | 0.12 s | details |
| #10 | WRONG ANSWER | 0.12 s | details |
| #11 | WRONG ANSWER | 0.11 s | details |
| #12 | WRONG ANSWER | 0.12 s | details |
| #13 | WRONG ANSWER | 0.11 s | details |
| #14 | ACCEPTED | 0.11 s | details |
| #15 | ACCEPTED | 0.11 s | details |
| #16 | WRONG ANSWER | 0.10 s | details |
| #17 | WRONG ANSWER | 0.12 s | details |
| #18 | WRONG ANSWER | 0.11 s | details |
| #19 | WRONG ANSWER | 0.12 s | details |
| #20 | ACCEPTED | 0.11 s | details |
| #21 | ACCEPTED | 0.11 s | details |
| #22 | ACCEPTED | 0.12 s | details |
| #23 | ACCEPTED | 0.12 s | details |
| #24 | ACCEPTED | 0.12 s | details |
| #25 | ACCEPTED | 0.12 s | details |
| #26 | ACCEPTED | 0.11 s | details |
| #27 | WRONG ANSWER | 0.11 s | details |
| #28 | WRONG ANSWER | 0.13 s | details |
| #29 | WRONG ANSWER | 0.14 s | details |
| #30 | WRONG ANSWER | 0.14 s | details |
| #31 | WRONG ANSWER | 0.12 s | details |
| #32 | WRONG ANSWER | 0.14 s | details |
| #33 | WRONG ANSWER | 0.11 s | details |
| #34 | WRONG ANSWER | 0.11 s | details |
| #35 | WRONG ANSWER | 0.13 s | details |
| #36 | WRONG ANSWER | 0.13 s | details |
| #37 | WRONG ANSWER | 0.14 s | details |
| #38 | WRONG ANSWER | 0.11 s | details |
Code
#include <iostream>
using namespace std;
int N;
const int M=1000000007;
int h[101010];
int cm[5111][5111];
long long calc(int dh, int dp, int h0){
if (dh<0) dh=-dh;
if (dh>dp) return 0;
if (dh>5000) return 0;
if (dp>5000){
int a=dp/2;
int b=dp-a;
long long s=0;
for (int h=0; h<h0+a+1; ++h){
s+=calc(h-h0, a, min(h, h0))*calc(h0+dh-h, b, min(h0+dh, h));
}
return s;
}
long long s=0;
for (int i=0; i<=h0; ++i){
s+=cm[dp][dh];
s%=M;
--dp; ++dh;
if (dh>dp) break;
}
return s;
}
int main(){
cm[0][0]=1;
for (int dp=1; dp<5111; ++dp){
for (int dh=min(dp, 51110); dh>=0; --dh){
cm[dp][dh]=cm[dp-1][dh+1]+cm[dp-1][dh];
cm[dp][dh]%=M;
if (dh>0)cm[dp][dh]+=cm[dp-1][dh-1];
cm[dp][dh]%=M;
}
}
cin >> N;
for (int i=0; i<N; ++i){
cin >> h[i];
if (i==0 || i==N-1){
if (h[i]!=-1 && h[i]!=0){
cout << 0 << "\n";
return 0;
}
h[i]=0;
}
}
long long ans=1;
int li=0;
int lh=0;
for (int i=1; i<N; ++i){
if (h[i]==-1) continue;
ans*=calc(lh-h[i], i-li, min(h[i], lh));
ans%=M;
if (ans==0) break;
lh=h[i];
li=i;
}
cout << ans << "\n";
}Test details
Test 1
Verdict: ACCEPTED
| input |
|---|
| 3
-1 2 -1 |
| correct output |
|---|
| 0 |
| user output |
|---|
| 0 |
Test 2
Verdict: ACCEPTED
| input |
|---|
| 3
-1 -1 -1 |
| correct output |
|---|
| 2 |
| user output |
|---|
| 2 |
Test 3
Verdict: ACCEPTED
| input |
|---|
| 6
-1 -1 -1 2 -1 -1 |
| correct output |
|---|
| 3 |
| user output |
|---|
| 3 |
Test 4
Verdict: ACCEPTED
| input |
|---|
| 1
-1 |
| correct output |
|---|
| 1 |
| user output |
|---|
| 1 |
Test 5
Verdict: ACCEPTED
| input |
|---|
| 1
0 |
| correct output |
|---|
| 1 |
| user output |
|---|
| 1 |
Test 6
Verdict: ACCEPTED
| input |
|---|
| 1
1 |
| correct output |
|---|
| 0 |
| user output |
|---|
| 0 |
Test 7
Verdict: ACCEPTED
| input |
|---|
| 15
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ... |
| correct output |
|---|
| 113634 |
| user output |
|---|
| 113634 |
Test 8
Verdict: WRONG ANSWER
| input |
|---|
| 30
-1 -1 -1 -1 -1 -1 -1 -1 7 -1 -... |
| correct output |
|---|
| 33792 |
| user output |
|---|
| 33696 |
Test 9
Verdict: WRONG ANSWER
| input |
|---|
| 40
-1 -1 -1 -1 -1 -1 -1 6 -1 -1 -... |
| correct output |
|---|
| 44058168 |
| user output |
|---|
| 31783752 |
Test 10
Verdict: WRONG ANSWER
| input |
|---|
| 50
-1 -1 -1 -1 4 -1 -1 -1 -1 -1 -... |
| correct output |
|---|
| 885261321 |
| user output |
|---|
| 627501000 |
Test 11
Verdict: WRONG ANSWER
| input |
|---|
| 100
-1 -1 -1 -1 -1 -1 -1 -1 7 -1 -... |
| correct output |
|---|
| 630105363 |
| user output |
|---|
| 708326824 |
Test 12
Verdict: WRONG ANSWER
| input |
|---|
| 200
0 -1 -1 -1 4 -1 -1 -1 -1 0 -1 ... |
| correct output |
|---|
| 584749136 |
| user output |
|---|
| 881863820 |
Test 13
Verdict: WRONG ANSWER
| input |
|---|
| 300
-1 -1 0 -1 -1 -1 -1 -1 -1 -1 -... |
| correct output |
|---|
| 440962689 |
| user output |
|---|
| 76427820 |
Test 14
Verdict: ACCEPTED
| input |
|---|
| 500
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ... |
| correct output |
|---|
| 861085225 |
| user output |
|---|
| 861085225 |
Test 15
Verdict: ACCEPTED
| input |
|---|
| 499
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ... |
| correct output |
|---|
| 686858355 |
| user output |
|---|
| 686858355 |
Test 16
Verdict: WRONG ANSWER
| input |
|---|
| 500
0 0 -1 -1 -1 3 -1 -1 -1 6 6 -1... |
| correct output |
|---|
| 287620623 |
| user output |
|---|
| 719127853 |
Test 17
Verdict: WRONG ANSWER
| input |
|---|
| 500
0 -1 -1 1 -1 0 -1 0 -1 -1 3 -1... |
| correct output |
|---|
| 132437565 |
| user output |
|---|
| 640887167 |
Test 18
Verdict: WRONG ANSWER
| input |
|---|
| 500
0 -1 1 -1 2 2 -1 4 -1 -1 -1 1 ... |
| correct output |
|---|
| 545015067 |
| user output |
|---|
| 930075931 |
Test 19
Verdict: WRONG ANSWER
| input |
|---|
| 500
-1 1 1 -1 1 -1 1 -1 -1 1 -1 -1... |
| correct output |
|---|
| 394701022 |
| user output |
|---|
| 605436920 |
Test 20
Verdict: ACCEPTED
| input |
|---|
| 500
0 -1 -1 2 -1 -1 -1 -1 -1 -1 -1... |
| correct output |
|---|
| 287409105 |
| user output |
|---|
| 287409105 |
Test 21
Verdict: ACCEPTED
| input |
|---|
| 500
0 -1 -1 -1 -1 -1 -1 -1 -1 -1 -... |
| correct output |
|---|
| 455719894 |
| user output |
|---|
| 455719894 |
Test 22
Verdict: ACCEPTED
| input |
|---|
| 500
-1 1 -1 -1 -1 -1 -1 -1 -1 -1 -... |
| correct output |
|---|
| 174226870 |
| user output |
|---|
| 174226870 |
Test 23
Verdict: ACCEPTED
| input |
|---|
| 500
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ... |
| correct output |
|---|
| 861085225 |
| user output |
|---|
| 861085225 |
Test 24
Verdict: ACCEPTED
| input |
|---|
| 1000
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ... |
| correct output |
|---|
| 812718674 |
| user output |
|---|
| 812718674 |
Test 25
Verdict: ACCEPTED
| input |
|---|
| 2000
-1 1 -1 -1 -1 -1 -1 -1 -1 -1 -... |
| correct output |
|---|
| 93994771 |
| user output |
|---|
| 93994771 |
Test 26
Verdict: ACCEPTED
| input |
|---|
| 3000
-1 0 -1 -1 -1 -1 -1 -1 -1 -1 -... |
| correct output |
|---|
| 335231082 |
| user output |
|---|
| 335231082 |
Test 27
Verdict: WRONG ANSWER
| input |
|---|
| 5000
0 -1 2 -1 1 2 -1 -1 5 -1 -1 7 ... |
| correct output |
|---|
| 799295101 |
| user output |
|---|
| 892766840 |
Test 28
Verdict: WRONG ANSWER
| input |
|---|
| 7000
0 -1 0 0 -1 0 -1 1 0 1 0 0 -1 ... |
| correct output |
|---|
| 436287141 |
| user output |
|---|
| -258737161 |
Test 29
Verdict: WRONG ANSWER
| input |
|---|
| 8000
0 -1 1 -1 3 -1 1 -1 1 0 -1 -1 ... |
| correct output |
|---|
| 88524447 |
| user output |
|---|
| 585896457 |
Test 30
Verdict: WRONG ANSWER
| input |
|---|
| 10000
0 0 1 -1 -1 3 2 -1 3 -1 4 -1 5... |
| correct output |
|---|
| 129950957 |
| user output |
|---|
| 256901097 |
Test 31
Verdict: WRONG ANSWER
| input |
|---|
| 10000
-1 0 -1 -1 3 2 -1 -1 -1 -1 1 -... |
| correct output |
|---|
| 598246902 |
| user output |
|---|
| 28724343 |
Test 32
Verdict: WRONG ANSWER
| input |
|---|
| 10000
-1 1 0 -1 2 1 -1 1 -1 0 -1 -1 ... |
| correct output |
|---|
| 105842640 |
| user output |
|---|
| -134219256 |
Test 33
Verdict: WRONG ANSWER
| input |
|---|
| 10000
0 -1 0 -1 -1 -1 4 3 -1 -1 -1 -... |
| correct output |
|---|
| 133310608 |
| user output |
|---|
| 195344365 |
Test 34
Verdict: WRONG ANSWER
| input |
|---|
| 10000
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ... |
| correct output |
|---|
| 484205143 |
| user output |
|---|
| 250658906 |
Test 35
Verdict: WRONG ANSWER
| input |
|---|
| 10000
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ... |
| correct output |
|---|
| 904817827 |
| user output |
|---|
| 497597117 |
Test 36
Verdict: WRONG ANSWER
| input |
|---|
| 10000
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ... |
| correct output |
|---|
| 966971895 |
| user output |
|---|
| 494433599 |
Test 37
Verdict: WRONG ANSWER
| input |
|---|
| 10000
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ... |
| correct output |
|---|
| 664825423 |
| user output |
|---|
| 703520798 |
Test 38
Verdict: WRONG ANSWER
| input |
|---|
| 10000
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 ... |
| correct output |
|---|
| 681928184 |
| user output |
|---|
| 664879921 |
