#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
const int maxn = int(2e3)+5, MOD = int(1e9)+7;
int n, cs, cf, memo[maxn][maxn][2][2];
int DP(int idx, int chains, int start, int end)
{
if(idx == n) return (start && end && !chains);
else if(memo[idx][chains][start][end] != -1) return memo[idx][chains][start][end];
else if(idx == cs)
{
int res = DP(idx+1, chains, 1, end);
if(chains)
{
res += DP(idx+1, chains-1, 1, end);
res %= MOD;
}
res %= MOD;
memo[idx][chains][start][end] = res;
return res;
}
else if(idx == cf)
{
int res = DP(idx+1, chains, start, 1);
if(chains)
{
res += DP(idx+1, chains-1, start, 1);
res %= MOD;
}
res %= MOD;
memo[idx][chains][start][end] = res;
return res;
}
else
{
int res = DP(idx+1, chains+1, start, end);
if(chains > 1)
{
res += DP(idx+1, chains-1, start, end);
res %= MOD;
}
if(start && chains)
{
res += DP(idx+1, chains-1, start, end);
res %= MOD;
}
if(chains && end)
{
res += DP(idx+1, chains-1, start, end);
res %= MOD;
}
res %= MOD;
memo[idx][chains][start][end] = res;
return res;
}
}
int main(void)
{
scanf("%d%d%d", &n, &cs, &cf);
cs--, cf--;
for(int i = 0;i <= n;i++)
{
for(int j = 0;j <= n;j++)
{
for(int k = 0;k < 2;k++)
{
for(int l = 0;l < 2;l++) memo[i][j][k][l] = -1;
}
}
}
printf("%d\n", DP(0, 0, 0, 0));
}
Compilation message
kangaroo.cpp: In function 'int main()':
kangaroo.cpp:64:31: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d%d%d", &n, &cs, &cf);
^
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
64832 KB |
Output is correct |
2 |
Correct |
0 ms |
64832 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
64832 KB |
Output is correct |
2 |
Correct |
0 ms |
64832 KB |
Output is correct |
3 |
Incorrect |
0 ms |
64832 KB |
Output isn't correct |
4 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
64832 KB |
Output is correct |
2 |
Correct |
0 ms |
64832 KB |
Output is correct |
3 |
Incorrect |
0 ms |
64832 KB |
Output isn't correct |
4 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
0 ms |
64832 KB |
Output is correct |
2 |
Correct |
0 ms |
64832 KB |
Output is correct |
3 |
Incorrect |
0 ms |
64832 KB |
Output isn't correct |
4 |
Halted |
0 ms |
0 KB |
- |