!!!

问题 G: 跳方格 (lattice)

时间限制: 1 Sec  内存限制: 128 MB
提交 状态

题目描述

有一个长长的走廊,巨神 ctt 把它分成m方格,从左到右编号为1,2,...,m。

有一天,巨神 ctt 得到了n个蹦床,他把这些蹦床放在方格里,他在编号为1的方格里放了一个蹦床,在编号为2,3,...,m-1的方格中放置了n-1个蹦床(一个方格只能放一个蹦床)。

巨神 ctt 估算了自己的跳远水平和蹦床的弹性,知道了他从第i个蹦床跳跃最多可以跳过li个方格(若这个蹦床放置的方格编号为k,则他最多能跳到编号为k+li的方格里,l1表示从编号为1的方格里的蹦床跳跃最可以跳过l1个方格),他开始计算从编号为1的方格,从左向右在蹦床上跳跃,最终到达编号为m的方格上,这样跳跃的方式有多少种。

巨神 ctt 非常生气,因为他直接秒出了答案,所以他用这繁杂的统计来考考你,但你的结果可以对109+7取模。

输入

第一行三个正整数n,m,l1,表示蹦床的个数、方格的个数和从编号为1的方格里的蹦床跳跃最可以跳过的方格数。
接下来n-1行,每行两个正整数,第i行的两个正整数分别表示第i个蹦床所在方格的编号和从第i个蹦床跳跃最多可以跳过的方格数。

输出

仅一行一个整数表示答案。

样例输入 Copy

【样例1】
3 5 3
2 1
4 1
【样例2】
5 7 2
2 2
4 1
5 2
6 1

样例输出 Copy

【样例1】
1
【样例2】
2

提示

题目大意:

中文题意

题目思路:

首先看到n <= 1e6,m<=1e8,绝对是对n操作,而不是对m进行操作

考虑如何对n进行操作?

发现,只有有蹦床的点才会对答案有贡献,那么有蹦床的点不就这n个点?

如何才能不考虑到数值问题呢?

离散化通常是将问题转换为只与大小有关系的问题,所以可以这么考虑。

假设x 可以跳到 x+y,那么x对 [x+1,x+y]有贡献,那么[x+1,x+y]有哪些点就变成了只考虑大小的问题

所以此题也就可以解决了 —— 线段树与树状数组都可

但是会被卡超时(如果是用线段树或者树状数组) 或许常数太大?

考虑差分数组,但是差分数组有不能在线(边修改边查询)

但是会发现这个过程,只会查询当前位置向后的位置,而不查询当前位置之前的位置,所以差分数组完全可以!

之后就卡过啦!

Code:

/*** keep hungry and calm CoolGuang!***/
#pragma GCC optimize(3)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pp;
const ll INF=1e17;
const int Maxn=1e6+10;
const int maxn =1e6+10;
const int mod= 1e9+7;
const int Mod = 1e6+7;
///const double eps=1e-10;
const int S = 1000;
inline bool read(ll &num)
{char in;bool IsN=false;in=getchar();if(in==EOF) return false;while(in!='-'&&(in<'0'||in>'9')) in=getchar();if(in=='-'){ IsN=true;num=0;}else num=in-'0';while(in=getchar(),in>='0'&&in<='9'){num*=10,num+=in-'0';}if(IsN) num=-num;return true;}
ll n,m,p;
struct node{int pos,l;
}q[maxn];
bool operator<(node a,node b){return a.pos < b.pos;
}
int check_l(int x){///大于等于l的第一个位置int ans = -1;int l = 2,r = n+1;while(l<=r){int mid = (l+r)/2;if(q[mid].pos >= x){ans = mid;r = mid-1;}else l = mid+1;}return ans;
}
int check_r(int x){int ans = -1;int l =2,r = n+1;while(l<=r){int mid = (l+r)/2;if(q[mid].pos <= x){ans = mid;l = mid+1;}else r = mid-1;}return ans;
}
ll dp[maxn];
ll f[maxn];
int main()
{read(n);read(m);read(p);for(int i=2;i<=n;i++)scanf("%d%d",&q[i].pos,&q[i].l);sort(q+2,q+n+1);dp[1] = 1;q[1].pos = 1;q[1].l = p;q[n+1].pos = m;f[1] = 1;f[2] = -1;ll ans = 0;for(int i=1;i<=n;i++){ans = (ans + f[i])%mod;int l = check_l(q[i].pos+1),r = check_r(q[i].pos+q[i].l);if(~l&&~r){f[l] = (f[l] + ans)%mod;f[r+1] = (f[r+1] - ans%mod+mod)%mod;}}printf("%lld\n",(ans + f[n+1])%mod);return 0;
}

【upc】 跳方格 (lattice) | 差分、思维、dp相关推荐

  1. 跳方格(离散化+差分)

    跳方格 (lattice) 时间限制: 1 Sec  内存限制: 128 MB 题目描述 有一个长长的走廊,巨神 ctt 把它分成m方格,从左到右编号为1,2,...,m. 有一天,巨神 ctt 得到 ...

  2. 跳方格 (lattice) (差分+二分)

    题目描述 有一个长长的走廊,巨神 ctt 把它分成m方格,从左到右编号为1,2,-,m. 有一天,巨神 ctt 得到了n个蹦床,他把这些蹦床放在方格里,他在编号为1的方格里放了一个蹦床,在编号为2,3 ...

  3. 美团笔试题 小美的跳方格

    看到一道美团(不知道什么时候)的笔试题,问题描述如下: 在网上查到过其他网友的解法,感觉和我的理解不太一样, 这里写一下我自己对题目的理解. 我比较疑惑的是小美跳方格的方式,是每次移动一格,还是可跳到 ...

  4. codevs——2853 方格游戏(棋盘DP)

    时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 菜菜看到了一个游戏,叫做方格游戏~ 游戏规则是这样的: 在一个n*n的格 ...

  5. CodeForces - 1353E K-periodic Garland(思维+dp)

    题目链接:点击查看 题目大意:给出 n 个灯泡以及其初始状态(开或关),每次操作可以将任意一个灯泡的状态置反,问最少需要操作多少次,可以使得所有开着的灯泡之间相距 k 个单位 题目分析:因为需要满足所 ...

  6. CH - 0304 IncDec Sequence(差分+思维)

    题目链接:点击查看 题目大意:给定一个长度为 n(n≤10^5 ) 的数列 {a_1,a_2,-,a_n},每次可以选择一个区间 [l,r],使下标在这个区间内的数都加一或者都减一.求至少需要多少次操 ...

  7. Codeforces Round #590 (Div. 3) E. Special Permutations 差分 + 思维

    传送门 文章目录 题意: 思路: 题意: 思路: 直接考虑比较难想,这种公式题基本都是将部分答案看成一个整体,考虑xi,xi+1x_i,x_{i+1}xi​,xi+1​的贡献的. 假设当前的xi=x, ...

  8. 跳打开hdu 1208 (DP)

    新手发帖,很多方面都是刚入门,有错误的地方请大家见谅,欢迎批评指正 点击打开链接 /* DP ,有点水,直接码代. map[ i ][ j ]表现跳几格   dp [ i ][ j ] 表现有几种条法 ...

  9. upc Cafebazaar’s Chess Tournament 思维 + FFT

    说实话,题我没大读懂. 听zwz大佬说这个题挑战者的两个能力值不能与被挑战者能力值相等,不过可以取实数,所以这句话看没看到都不影响这个思路,因为每个相等的数都可以+0.1或-0.1来实现不相等且不影响 ...

最新文章

  1. SQLer:无需编程语言即可将SQL查询转换为RESTful API的工具
  2. 【Python】青少年蓝桥杯_每日一题_11.27_电梯用电量
  3. JAVA 设计模式 观察者模式
  4. java 8 lambda 排序_Java8 用Lambda表达式给List集合排序的实现
  5. AppDelegate
  6. 【送书-小姐姐配音】低代码平台的核心价值与优势
  7. 定时运行python脚本并发送邮件_python实现定时发送邮件到指定邮箱
  8. pythonturtle是标准库_Python标准库: turtle--海龟绘图。
  9. ShardingSphere-Proxy 主从读写 入门使用
  10. devc跟vc2010通用吗_王者荣耀:通用铭文大全!让你赢在起跑线上!教你1比1换铭文...
  11. VS.NET 控件命名规范
  12. NLP(自然语言处理技术)
  13. Event-b 学习总结
  14. android 设置ios 字体大小设置,iPhone11字体大小怎么调?苹果手机调节字体大小的三种方法...
  15. 轻松解决U盘中病毒,文件变成.exe执行文件的问题
  16. netbeans卸载
  17. sudo -s sudo su
  18. Python的Module,Library,Package的区别
  19. PHP扭蛋机原理,微信小程序 扭蛋抽奖机css3动画实现详解
  20. ansj词典加载及简洁分词过程

热门文章

  1. SYNTHIA-RAND-CITYSCAPES数据集云盘下载
  2. PyTorch 入门学习(四)————训练分类器
  3. arcgis10.7 面要素均匀生成点
  4. PS教程之在线抠图的步骤,如何将一张图抠图到另一张图片
  5. 人情事故还是人情世故?
  6. 汇付天下私有化获股东批准:预计下周三停止交易,将于3月末退市
  7. 【JS实战】移除数组中的元素(返回新的数组)
  8. 任正非女儿演讲谈华为人才观:选择比天赋重要
  9. Dockerfile中CMD和ENTRYPOINT区别
  10. 案例:从定性原因分析上升到定量原因分析