XX 校最近打算美化一下校园环境。

前段时间因为修地铁,XX 校大门外种的行道树全部都被移走了。

现在 XX 校打算重新再种一些树,为校园增添一抹绿意。

XX 校大门外的道路是东西走向的,我们可以将其看成一条数轴。

在这条数轴上有 nn 个障碍物,例如电线杆之类的。

虽然障碍物会影响树的生长,但是障碍物不一定能被随便移走,所以 XX 校规定在障碍物的位置上不能种树。

nn 个障碍物的坐标都是整数;如果规定向东为正方向,则 nn 个障碍物的坐标按照从西到东的顺序分别为 a1,a2,⋯,ana1,a2,⋯,an。

XX 校打算在 [a1,an][a1,an] 之间种一些树,使得这些树看起来比较美观。

XX 校希望,在一定范围内,树应该是等间隔的。

更具体地说,如果把 [a1,an)[a1,an) 划分成一些区间 [ap1,ap2),⋯,[apm−1,apm)[ap1,ap2),⋯,[apm−1,apm)(1=p1<p2<⋯<pm=n1=p1<p2<⋯<pm=n),那么每个区间 [api,api+1)[api,api+1) 内需要至少种一棵树,且该区间内种的树的坐标连同区间端点 api,api+1api,api+1 应该构成一个等差数列。

不同区间的公差,也就是树的间隔可以不相同。

例如,如果障碍物位于 0,2,60,2,6 这三处,那么我们可以选择在 [0,2)[0,2) 和 [2,6)[2,6) 分别种树,也可以选择在 [0,6)[0,6) 等间隔种树。

如果是分别在 [0,2)[0,2) 和 [2,6)[2,6) 种树,由于每个区间内至少要种一棵树,坐标 11 上必须种树;而 [2,6)[2,6) 上的树可以按照 11 的间隔种下,也可以按照 22 的间隔种下。

下图表示了这两种美观的种树方案,其中橙色的圆表示障碍物,绿色的圆表示需要在这个位置种树,箭头上的数字表示种下这棵树时对应的间隔为多少。

对区间 [0,2)[0,2) 和 [2,6)[2,6) 分别以 11 和 22 的间隔种树是美观的

对区间 [0,2)[0,2) 和 [2,6)[2,6) 分别以 11 的间隔种树也是美观的

而如果选择在 [0,6)[0,6) 区间等间隔种树,我们只能以 33 的间隔种树,因为无论是选择间隔 11 或者间隔 22,都需要在坐标 22 上种树,而这个位置已经有障碍物了。

下图分别表示了间隔为 3,2,13,2,1 时的种树情况,红色箭头表示不能在这里种树。

对区间 [0,6)[0,6) 以 33 的间隔种树是美观的

对区间 [0,6)[0,6) 以 22 的间隔种树是不美观的

对区间 [0,6)[0,6) 以 11 的间隔种树也是不美观的

一般地,给定一个区间 [al,ar)[al,ar),对于树的坐标的集合 T⊂(al,ar)T⊂(al,ar)(T⊂ZT⊂Z),归纳定义 TT 在 [al,ar)[al,ar) 上是美观的

  1. 如果 T≠∅T≠∅,T∩{al,al+1,⋯,ar}=∅T∩{al,al+1,⋯,ar}=∅,并且存在一个公差 d≥1d≥1,使得 T∪{al,ar}T∪{al,ar} 中的元素按照从小到大的顺序排序后,可以构成一个公差为 dd 的等差数列(显然,这个等差数列的首项为 alal,末项为 arar),则 TT 在 [al,ar)[al,ar) 上是美观的;
  2. 如果 T∩{al,al+1,⋯,ar}=∅T∩{al,al+1,⋯,ar}=∅,并且存在一个下标 mm(l<m<rl<m<r),使得 T∩(al,am)T∩(al,am) 在 [al,am)[al,am) 上是美观的,且 T∩(am,ar)T∩(am,ar) 在 [am,ar)[am,ar) 上是美观的,则 TT 在 [al,ar)[al,ar) 上是美观的。

根据这一定义,空集在任意区间上都不是美观的;另外,如果存在下标 ii 使得 ai∈Tai∈T,那么 TT 一定不是美观的。

我们称两种种树的方案是本质不同的,当且仅当两种方案中,种树的坐标集合不同。

请帮助 XX 校对 [a1,an)[a1,an) 求出所有本质不同的美观的种树方案。

当然,由于方案可能很多,你只需要输出总方案数对 109+7109+7 取模的结果。

输入格式

输入的第一行包含一个正整数 nn,表示障碍物的数量。

输入的第二行包括 nn 个非负整数 a1,⋯,ana1,⋯,an,表示每个障碍物的坐标。

保证对 i=1,2,⋯,n−1i=1,2,⋯,n−1,ai<ai+1ai<ai+1。

输出格式

输出一个非负整数,表示本质不同的美观的种树方案的数量对 109+7109+7 取模的结果。

数据范围

对于 10%10% 的数据,保证 n=2n=2;
对于 30%30% 的数据,保证 n≤10n≤10;
对于 60%60% 的数据,保证 n≤100,ai≤1000n≤100,ai≤1000;
对于 100%100% 的数据,保证 2≤n≤1000,0≤ai≤100,0002≤n≤1000,0≤ai≤100,000,且至少存在一种美观的种树方案。

输入样例1:

3
0 2 6

输出样例1:

3

样例1解释

这组样例即为题面描述中提到的那组。

输入样例2:

11
0 10 20 30 40 50 60 70 80 90 100

输出样例2:

256507

输入样例3:

333
33 44 67 210 528 762 873 984 1234 1466 1739 2859 3421 4061 4598 5172 5201 5220 5261 5322 5389 5559 6670 7070 7898 8079 8129 8192 8616 8641 8806 9559 9585 9750 10263 10627 10674 10692 10903 11649 11885 12179 12307 12743 13173 13352 13389 13496 13611 15292 15321 16018 16327 16415 16959 16972 17499 17617 17786 18476 18966 19239 19498 19875 20312 20392 21603 21620 21730 21967 21972 21999 22015 22590 22775 23709 23839 24165 24408 24595 25160 25479 25812 26482 27328 28101 28297 28305 28342 28557 28986 29110 29401 29765 30292 30493 30739 31027 31201 31218 31414 32089 32759 32770 32777 32815 32877 32890 33297 33457 33603 33757 33866 34498 34525 34659 34679 34861 34870 34997 35311 35846 36411 36457 36738 36902 37940 38228 40156 40320 40705 40737 40803 41066 41443 41460 41954 41968 42040 42062 42099 43281 43320 43527 43537 43587 43729 44750 44822 45655 45769 46109 46525 47060 47128 47999 48635 48887 48981 49366 49424 49524 50546 50580 50689 51332 51861 51943 52097 52702 53009 53067 53397 53526 53901 54280 54399 54801 55535 55592 55740 55843 56110 56428 56552 56682 56848 57179 57688 57797 57847 57959 58330 58831 59553 59699 59884 59939 61233 61636 61732 61908 62145 62549 62649 62740 62912 62971 63053 64312 64322 64412 64816 64845 64873 64923 64976 65023 65166 65496 66065 66491 66803 66941 67081 68331 68336 68360 68476 69179 69719 69758 69948 70072 70544 70598 70990 71014 71454 71687 71743 71958 72282 72384 72456 72985 73327 74325 75046 75097 76647 77062 77088 77431 77553 77673 77753 78217 78518 78564 79565 79588 79686 80275 80939 81052 81348 81386 81440 81589 81610 81793 82408 82801 82836 83239 83466 83610 83867 83943 84441 84467 85248 85305 85554 85565 85758 86251 86603 86743 87323 87565 87824 87833 88265 88309 89178 89509 89618 89699 89708 90331 90359 90878 90902 91449 92284 92374 92549 92609 93609 94345 94934 95140 95475 95733 95985 95995 96270 96641 96807 97003 97632 98160 98677 98853 98943 99037 99055 99075 99185 99395 99592

输出样例3:

7094396

代码如下:

#include <bits/stdc++.h>
using namespace std;
const int N=1010,M=10010,mod=1e9+7;
vector<int> cnt[M];
int dp[N];
bool st[M];
int a[N];void func()
{for(int i=1;i<M;i++){for(int j=i*2;j<M;j=j+i){cnt[j].push_back(i);}}
}int main()
{int n;cin>>n;for(int i=0;i<n;i++){cin>>a[i];}func();dp[0]=1;//不能赋值为0for(int i=1;i<n;i++){memset(st,0,sizeof st);for(int j=i-1;j>=0;j--){int num=0;int k=a[i]-a[j];for(int l=0;l<cnt[k].size();l++){int x=cnt[k][l];if(st[x]) continue;num++;st[x]=true;}st[k]=true;dp[i]=(dp[i]+(long long )dp[j]*num)%mod;}}cout<<dp[n-1];return 0;
}

CSP202104-4 校门外的树相关推荐

  1. P1276 校门外的树(增强版)(线段树)(校门三部曲)难度⭐⭐⭐

    校门三部曲,总算完结了!完结散花! 难度呈阶梯状,都可以用线段树解决. 第一部 P1047 校门外的树(线段树优化)难度⭐⭐ 第二部 P1276 校门外的树(增强版)(线段树)校门三部曲难度⭐⭐⭐ 第 ...

  2. P1047 校门外的树(线段树优化)(校门三部曲)难度⭐⭐

    校门三部曲,总算完结了!完结散花! 难度呈阶梯状,都可以用线段树解决. 第一部 P1047 校门外的树(线段树优化)难度⭐⭐ 第二部 P1276 校门外的树(增强版)(线段树)校门三部曲难度⭐⭐⭐ 第 ...

  3. Vijos P1103 校门外的树【线段树,模拟】

    校门外的树 描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,--, ...

  4. CCF 202104-4 校门外的树 Python

    202104-4 校门外的树 题目链接 题型分析 代码 但运行超时,只能拿到60分,欢迎各位提问和改进! 题目链接 http://118.190.20.162/view.page?gpid=T125 ...

  5. 校门外的树——树状数组+区间修改

    校门外的树 [题目分析]题目描述的是一种区间修改,看起来好像要用线段树.但是对于这种区间内部没有差别并且查询的是区间内的类别的问题,是可以转化为树状数组进行的.毕竟树状数组更加简单. 我们的关注点应该 ...

  6. P1047 [NOIP2005 普及组] 校门外的树(python3实现)

    [NOIP2005 普及组] 校门外的树 - 洛谷 """P1047 [NOIP2005 普及组] 校门外的树(python3实现) https://www.luogu. ...

  7. 信息学奥赛一本通 1107:校门外的树 | 1931:【05NOIP普及组】校门外的树 | OpenJudge NOI 1.6 06 | 洛谷 P1047 [NOIP2005 普及组] 校门外的树

    [题目链接] ybt 1107:校门外的树 ybt 1931:[05NOIP普及组]校门外的树 OpenJudge NOI 1.6 06:校门外的树 洛谷 P1047 [NOIP2005 普及组] 校 ...

  8. 信息学奥赛一本通(1107:校门外的树)

    1107:校门外的树 时间限制: 1000 ms         内存限制: 65536 KB 提交数: 44359     通过数: 23491 [题目描述] 某校大门外长度为L的马路上有一排树,每 ...

  9. 【解题报告】VijosP1448校门外的树(困难版)

    原题: 校门外有很多树,有苹果树,香蕉树,有会扔石头的,有可以吃掉补充体力的-- 如今学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现有两个操作: K=1,K=1,读入l ...

  10. Vijos P1448 校门外的树【多解,线段树,树状数组,括号序列法+暴力优化】

    校门外的树 描述 校门外有很多树,有苹果树,香蕉树,有会扔石头的,有可以吃掉补充体力的-- 如今学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现有两个操作: K=1,K= ...

最新文章

  1. EqualLogic 6100 V6 Synchronous Replication
  2. DB_NAME、DB_UNIQUE_NAME、SERVICE_NAME和INSTANCE_NAME等的区别
  3. 一个基于STM32实现的多组分气体分析仪项目
  4. Hibernate初学者教程
  5. Kafka Metrics指标监控
  6. java需要下载哪些,全网最新
  7. windbg 查看 PEG
  8. 中国草鱼养殖产业发展现状分析,生态养殖是未来发展趋势「图」
  9. Windows版navicat11破解
  10. 三大国产操作系统,到底哪个最好用
  11. win10下装黑苹果双系统_【教程】黑苹果一键安装双系统EFI驱动
  12. HDU - 6078 Wavel Sequence(动态规划+时间优化)
  13. 2023年证券、基金、银行从业资格证考试计划
  14. 围城如社会,故事如生活
  15. 驱动器开发:开源库汇总
  16. 三国论(11-15章)
  17. uniapp设置的组件样式在H5和APP中生效,在微信小程序中不生效问题解决
  18. 开始使用FCKeditor了
  19. 【docker系列】四种基础网络模式及自定义网络
  20. Fastadmin 权限管理

热门文章

  1. 时间序列的平稳性检验方法汇总篇
  2. 【RQNOJ86】智捅马蜂窝【最短路】
  3. unity物理引擎介绍
  4. 软件开发人员简历项目经验怎么写
  5. 麻辣江湖服务器正在维护,7月18日例行维护更新公告
  6. c语言编程学习宝典,C语言学习宝典
  7. 掌握业务流程图符号,提高业绩不再没有头绪
  8. 谷歌浏览器xp32位_如何正确的配置系统的浏览器系列篇(五)——合同管理系统...
  9. 单线程模型中Message、Handler、Message Queue、Looper之间的关系
  10. CrossApp简介