codeforces479E
Riding in a Lift
Imagine that you are in a building that has exactly n floors. You can move between the floors in a lift. Let's number the floors from bottom to top with integers from 1 to n. Now you're on the floor number a. You are very bored, so you want to take the lift. Floor number b has a secret lab, the entry is forbidden. However, you already are in the mood and decide to make k consecutive trips in the lift.
Let us suppose that at the moment you are on the floor number x (initially, you were on floor a). For another trip between floors you choose some floor with number y (y ≠ x) and the lift travels to this floor. As you cannot visit floor b with the secret lab, you decided that the distance from the current floor x to the chosen ymust be strictly less than the distance from the current floor x to floor b with the secret lab. Formally, it means that the following inequation must fulfill: |x - y| < |x - b|. After the lift successfully transports you to floor y, you write down number y in your notepad.
Your task is to find the number of distinct number sequences that you could have written in the notebook as the result of k trips in the lift. As the sought number of trips can be rather large, find the remainder after dividing the number by 1000000007 (109 + 7).
Input
The first line of the input contains four space-separated integers n, a, b, k (2 ≤ n ≤ 5000, 1 ≤ k ≤ 5000, 1 ≤ a, b ≤ n, a ≠ b).
Output
Print a single integer — the remainder after dividing the sought number of sequences by 1000000007 (109 + 7).
Examples
5 2 4 1
2
5 2 4 2
2
5 3 4 1
0
Note
Two sequences p1, p2, ..., pk and q1, q2, ..., qk are distinct, if there is such integer j (1 ≤ j ≤ k), that pj ≠ qj.
Notes to the samples:
- In the first sample after the first trip you are either on floor 1, or on floor 3, because |1 - 2| < |2 - 4| and |3 - 2| < |2 - 4|.
- In the second sample there are two possible sequences: (1, 2); (1, 3). You cannot choose floor 3 for the first trip because in this case no floor can be the floor for the second trip.
- In the third sample there are no sought sequences, because you cannot choose the floor for the first trip.
sol:非常水的dp,直接转移是n3的,但是智障选手比方说我写了数据结构优化(树状数组),可以做到n2logn,但是还是TLE了,然后想了一会发现自己脑抽了,直接差分就是n2了
然后悲伤的T了两发

#include <bits/stdc++.h>
using namespace std;
typedef int ll;
inline int read()
{
int s=;
bool f=;
char ch=' ';
while(!isdigit(ch))
{
f|=(ch=='-'); ch=getchar();
}
while(isdigit(ch))
{
s=(s<<)+(s<<)+(ch^); ch=getchar();
}
return (f)?(-s):(s);
}
#define R(x) x=read()
inline void write(int x)
{
if(x<)
{
putchar('-'); x=-x;
}
if(x<)
{
putchar(x+''); return;
}
write(x/);
putchar((x%)+'');
return;
}
#define W(x) write(x),putchar(' ')
#define Wl(x) write(x),putchar('\n')
const int N=,Mod=;
int n,a,b,m;
int dp[N][N];
inline void Ad(int &x,int y)
{
x+=y;
x-=(x>=Mod)?Mod:;
x+=(x<)?Mod:;
}
struct BIT
{
int S[N];
#define lowbit(x) ((x)&(-x))
inline void Init()
{
memset(S,,sizeof S);
}
inline void Ins(int x,int Val)
{
for(;x<=n;x+=lowbit(x))
{
Ad(S[x],Val);
}
}
inline void Updata(int l,int r,int Val)
{
Ins(l,Val); Ins(r+,-*Val);
}
inline int Que(int x)
{
int Sum=;
for(;x>;x-=lowbit(x))
{
Ad(Sum,S[x]);
}
return Sum;
}
}T;
int S[N];
int main()
{
int i,j,k;
R(n); R(a); R(b); R(m);
dp[a][]=;
for(i=;i<m;i++)
{
// T.Init();
for(j=;j<=n;j++) if(dp[j][i])
{
int oo=abs(j-b)-;
// if(max(1,j-oo)<=j-1) T.Updata(max(1,j-oo),j-1,dp[j][i]);
// if(j+1<=min(n,j+oo)) T.Updata(j+1,min(n,j+oo),dp[j][i]);
if(max(,j-oo)<=j-)
{
Ad(dp[max(,j-oo)][i+],dp[j][i]); Ad(dp[j-+][i+],-*dp[j][i]);
}
if(j+<=min(n,j+oo))
{
Ad(dp[j+][i+],dp[j][i]); Ad(dp[min(n,j+oo)+][i+],-*dp[j][i]);
}
}
for(j=;j<=n;j++) Ad(dp[j][i+],dp[j-][i+]);
// for(j=1;j<=n;j++) dp[j][i+1]=T.Que(j);
}
int ans=;
for(i=;i<=n;i++) Ad(ans,dp[i][m]);
Wl(ans);
return ;
}
/*
Input
5 2 4 1
Output
2 Input
5 2 4 2
Output
2 Input
5 3 4 1
Output
0 input
2222 1206 1425 2222
output
402572650 Input
5000 2500 1 5000
Output
898026985
*/
codeforces479E的更多相关文章
随机推荐
- You are what you write——沈向洋
title: You are what you write--沈向洋 date: 2018-02-21 13:18:28 tags: [随想,write] categories: 个人文章 --- A ...
- CSS深入理解流体特性和BFC特性下多栏自适应布局
一.块状元素的流体特性与自适应布局 块状元素像放在容器中的水流一样,内容区域会随着margin, padding, border的出现自动填满剩余空间,这就是块状元素的流体特性. 来一个小实验: di ...
- [JS设计模式]:单例模式(1)
什么是单例模式 所谓单例,就是一个类只有一个实例,实现的方法一般是先判断是否存在实例,如果存在就直接返回,如果不存在就创建了再返回.这样确保了一个类只有一个实例对象. 实现的单例有很多种方式,最简单的 ...
- C# 正则表达式应用
正则表达式平时不常用,经常都是用的时候,临时抱佛脚,查文档,然后就是被各种坑之后,才会逐渐熟练. 在线正则表达式测试:http://tool.oschina.net/regex/ 在线JSON格式化: ...
- iOS----------UITextField实现过滤选中状态拼音
2018年上班的第二天,就这样背了一个大锅.我们项目中有一个搜索功能,在这一期的版本中,为了增强优化,去除了过滤空格的请求,这样或许能增加很好的用户体验,恰恰相反,偷鸡不成蚀把米.没想到苹果系统的输入 ...
- Netty学习笔记(四) 简单的聊天室功能之服务端开发
前面三个章节,我们使用了Netty实现了DISCARD丢弃服务和回复以及自定义编码解码,这篇博客,我们要用Netty实现简单的聊天室功能. Ps: 突然想起来大学里面有个课程实训,给予UDP还是TCP ...
- 算法: 整数中1出现的次数(从1到n整数中1出现的次数)
问题: 整数中1出现的次数(从1到n整数中1出现的次数) 问题:求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数? 为此他特别数了一下1~13中包含1的数字有1.10.11 ...
- 精简你的 docker 镜像
精简你的 docker 镜像 Intro 现在 docker 的使用越来越普遍,今天来谈一下如何精简你的 docker 镜像 为什么要精简 docker 首先来说说为什么要精简 docker 镜像,减 ...
- Edge BUG欣赏之四摸鸡与IP地址的恩怨
<html><head> <meta http-equiv="Content-Type" content="text/html; c ...
- [Web][DreamweaverCS6][高中同学毕业分布去向网站+服务器上挂载]一、安装与破解DreamweaverCS6+基本规划
DreamweaverCS6安装与破解 一.背景介绍:同学毕业分布图项目计划简介 哎哎哎,炸么说呢,对于Web前端设计来说,纯手撕html部分代码实在是难受. 对于想做地图这类的就“必须”用这个老工具 ...