time limit per test2 seconds

memory limit per test512 megabytes

inputstandard input

outputstandard output

Memory and his friend Lexa are competing to get higher score in one popular computer game. Memory starts with score a and Lexa starts with score b. In a single turn, both Memory and Lexa get some integer in the range [ - k;k] (i.e. one integer among  - k,  - k + 1,  - k + 2, …,  - 2,  - 1, 0, 1, 2, …, k - 1, k) and add them to their current scores. The game has exactly t turns. Memory and Lexa, however, are not good at this game, so they both always get a random integer at their turn.

Memory wonders how many possible games exist such that he ends with a strictly higher score than Lexa. Two games are considered to be different if in at least one turn at least one player gets different score. There are (2k + 1)2t games in total. Since the answer can be very large, you should print it modulo 109 + 7. Please solve this problem for Memory.

Input

The first and only line of input contains the four integers a, b, k, and t (1 ≤ a, b ≤ 100, 1 ≤ k ≤ 1000, 1 ≤ t ≤ 100) — the amount Memory and Lexa start with, the number k, and the number of turns respectively.

Output

Print the number of possible games satisfying the conditions modulo 1 000 000 007 (109 + 7) in one line.

Examples

input

1 2 2 1

output

6

input

1 1 1 2

output

31

input

2 12 3 1

output

0

Note

In the first sample test, Memory starts with 1 and Lexa starts with 2. If Lexa picks  - 2, Memory can pick 0, 1, or 2 to win. If Lexa picks  - 1, Memory can pick 1 or 2 to win. If Lexa picks 0, Memory can pick 2 to win. If Lexa picks 1 or 2, Memory cannot win. Thus, there are 3 + 2 + 1 = 6 possible games in which Memory wins.

【题解】



题目要求的是最后两个人中甲的得分>乙的得分;

可以换个角度理解问题;

设甲相对于原来的分数增加的分数为x,乙相对于原来的分数增加的分数为y;

则最后要甲的得分大于乙的得分;

须满足x+a-b>y;

其中a和b是甲和乙原来的分数;

我们设f[i][j]表示i轮之后一个人相对于最初增加的分数为j的方案数:

则f[i][j] = f[i-1][j-k]+f[i-1][j-k+1]+f[i-1][j-k+2]+…+f[i][j+k-1]+f[i][j+k];

不要一个一个地加。在做的时候累加前缀和就好;

最后枚举甲相对最初增加的得分j;

然后枚举乙可以得到的分数范围;

最后的到的f[i][j]数组是i轮,分数”增加”了-INF,-INF+1,…j的方案数;

ans+= (f[t][j]-f[t][j-1])*f[t][j+a-b-1];

因为下标不能为负数;

所以整个数轴向右平移ZERO个单位;

0就变成了ZERO = K*T+100;

#include<cstdio>
#include<algorithm>
#include <iostream>
#include<cstring>
const int MAXT = 100;
const int MAXK = 1000;
const int MOD = 1000000007;
const int ZERO = 100100;
const int INF = 200200;
using namespace std; long long f[MAXT + 10][MAXT*MAXK * 2 + 300],ans = 0;
int a, b, t, k; void input(int &r)
{
r = 0;
char t = getchar();
while (!isdigit(t)) t = getchar();
while (isdigit(t)) r = r * 10 + t - '0', t = getchar();
} int main()
{
//freopen("F:\\rush.txt", "r", stdin);
input(a); input(b); input(k); input(t);
int i, j;
f[0][ZERO] = 1;//0回合一个都不选,增加的分数为0;
for (i = 1; i <= t; i++)
{
for (j = 1; j <= INF; j++)//先获取前缀和
f[i-1][j] = (f[i-1][j] + f[i-1][j - 1]) % MOD;
for (j = 0; j <=INF; j++)
f[i][j] = ((f[i - 1][min(INF, j + k)] - f[i - 1][max(j - k - 1, 0)])+MOD)%MOD;
//右边是通过前缀和获取能够转移到这个状态的方案数;
//f[i-1][j-k..j+k]这个范围;
}
for (j = 1; j <= INF; j++)//最后获取t轮的前缀和
f[t][j] = (f[t][j] + f[t][j - 1]) % MOD;
for (j = 0; j <= INF; j++)//枚举要赢的那个人"增加"的分数
{
int tt = min(INF, j + a - b - 1);//另一个人最大允许"增加"的分数
if (tt<0)
continue;
else
{
long long temp = f[t][j] - f[t][j - 1];
ans = (ans + (f[t][j] - f[t][j - 1]+MOD)*f[t][tt]) % MOD;
}
}
printf("%I64d\n", ans);
}

【26.87%】【codeforces 712D】Memory and Scores的更多相关文章

  1. 【 BowWow and the Timetable CodeForces - 1204A 】【思维】

    题目链接 可以发现 十进制4 对应 二进制100 十进制16 对应 二进制10000 十进制64 对应 二进制1000000 可以发现每多两个零,4的次幂就增加1. 用string读入题目给定的二进制 ...

  2. Codeforces 712 D. Memory and Scores (DP+滚动数组+前缀和优化)

    题目链接:http://codeforces.com/contest/712/problem/D A初始有一个分数a,B初始有一个分数b,有t轮比赛,每次比赛都可以取[-k, k]之间的数,问你最后A ...

  3. 【26.83%】【Codeforces Round #380C】Road to Cinema

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  4. 【26.09%】【codeforces 579C】A Problem about Polyline

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  5. 【26.67%】【codeforces 596C】Wilbur and Points

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  6. 【23.26%】【codeforces 747D】Winter Is Coming

    time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard ou ...

  7. 【codeforces 797C】Minimal string

    [题目链接]:http://codeforces.com/contest/797/problem/C [题意] 一开始,给你一个字符串s:两个空字符串t和u; 你有两种合法操作; 1.将s的开头字符加 ...

  8. 【codeforces 510C】Fox And Names

    [题目链接]:http://codeforces.com/contest/510/problem/C [题意] 给你n个字符串; 问你要怎么修改字典序; (即原本是a,b,c..z现在你可以修改每个字 ...

  9. 【codeforces 807B】T-Shirt Hunt

    [题目链接]:http://codeforces.com/contest/807/problem/B [题意] 你在另外一场已经结束的比赛中有一个排名p; 然后你现在在进行另外一场比赛 然后你当前有一 ...

随机推荐

  1. (笑话)切,我也是混血儿,我爸是A型血,我妈是B型血!

    1.中午,在家里看电视,电视里正在说起食品安全问题.侄儿突然感叹道:“现在的食品真不让人放心啊!”嘿,没想到侄儿小小年纪竟有这般认识,我正要抓住机会教育他不要乱吃零食.这时侄儿幽怨的瞪着我说:“我昨晚 ...

  2. Day2:购物车小程序

    一.购物车小程序第一版 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Hiuhung Wan product_list = [ (&quo ...

  3. orabbix 报错No suitable driver found for

     orabbix报错如下:   2018-07-11 14:35:20,119 [main] ERROR Orabbix - Error on Configurator for database qa ...

  4. SVGALib

    SVGALib是一套运行于Linux及FreeBSD下的开放源代码低阶绘图函式库,它允许程式设计人员变更视讯模式及全屏幕图像,许多热门的电脑游戏如Quake及Doom都源自此技术. 范例 编辑 #in ...

  5. python3中numpy函数的argsort()

    摘自:https://www.cnblogs.com/yushuo1990/p/5880041.html argsort函数argsort函数返回的是数组值从小到大的索引值 Examples----- ...

  6. ios 不支持屏幕旋转

    - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationMaskPortrait; }

  7. windows go 安装

    go的安装很简单,下载go的msi文件 这里提供go1.9的msi下载链接 https://www.lanzous.com/i2gb54d 直接全部next就行,默认安装在了c盘的go 然后配置环境变 ...

  8. [乐意黎原创] eclipse Kepler Selected SVN connector library is not available or cannot be loaded

    问题描写叙述:已经安装了subversive,可是在从SCM导入maven项目时.还是提示报错(如标题),依据报错原因发如今Team>SVN中确实没有svn连接器. 折腾了半天, 硬是没有结果. ...

  9. html5的float属性超详解(display,position, float)(文本流)

    html5的float属性超详解(display,position, float)(文本流) 一.总结 1.文本流: 2.float和绝对定位都不占文本流的位置 3.普通流是默认定位方式,就是依次按照 ...

  10. [Docker] Prune Old Unused Docker Containers and Images

    In this lesson, we will look at docker container prune to remove old docker containers. We can also ...