汕头市队赛 SRM 08 B
B-3 SRM 08
描述
给长度为 n 的数列 A 和长度为 m 的数列 B,问有多少长度为 m 的数列 C 满足
输入格式
第一行俩整数 n 和 m
第二行 n 个整数 ,表示数列 A
第三行 m 个整数 ,表示数列 B
输出格式
一个整数,表示满足条件的数列 C 的个数模 后的值。
样例输入 1
5 3
1 5 2 4 7
7 9 6
样例输出 1
4
样例输入 2
4 2
7 7 7 7
3 4
样例输出 2
6
数据范围与约定
样例解释
第一个样例中,数列 C 可以为 (1, 3, 5), (1, 4, 5), (2, 4, 5), (3, 4, 5)
第二个样例中,数列 C 可以为 (1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)
这道题呢 很容易想到n^2m复杂度的dp f[i][j] 表示以j结尾长度为i(即匹配到第二个队列的第i个)的符合串
水了点分
#include<cstdio>
#include<cstring>
#include<algorithm>
const int M=,mod=1e9+;
int read(){
int ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
int n,m,ans;
int a[M],b[M],f[M][];
int main()
{
n=read(); m=read();
for(int i=;i<=n;i++) a[i]=read(),f[i][]=;
for(int i=;i<=m;i++) b[i]=read();
for(int i=;i<=m;i++){
for(int j=i;j<=n;j++){
for(int k=;k<j;k++)
if(a[k]+b[i-]<=a[j]+b[i]) f[j][i]=(f[j][i]+f[k][i-])%mod;
}
}
for(int i=m;i<=n;i++) ans=(ans+f[i][m])%mod;
printf("%d\n",ans);
return ;
}
当然 这时间复杂度n一大绝对超时 这个时候就要想怎么降低时间复杂度了
观察后发现第三个循环枚举j前面所有点的时候 我们维护的信息明显可以用树状数组维护
我们需要的点的信息要满足 i<j && k[p+1]+b[i-1]<=k[j]+b[i]
那么 我们可以先给k【i】排一波序 然后进行一波离散化 方便后面树状数组的操作
树状数组下标表示相对大小关系
然后我们可以类似递推地求出 如果只考虑大小关系 有多少个数满足上式
考虑前后顺序 那么我们只要按原顺序逐渐插入树状数组中就可以保证了
然后就是单点修改上传信息以及区间求和了
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int M=,mod=1e9+;
int read(){
int ans=,f=,c=getchar();
while(c<''||c>''){if(c=='-') f=-; c=getchar();}
while(c>=''&&c<=''){ans=ans*+(c-''); c=getchar();}
return ans*f;
}
int n,m,cnt,f[M],last[M],ans;
int s[M],k[M],b[M],d[M],pos[M];
struct node{int w,pos;}q[M];
bool cmp(node a,node b){return a.w<b.w;}
int lowbit(int x){return x&-x;}
void add(int x,int v){
while(x<=n){
(s[x]+=v)%=mod;
x+=lowbit(x);
}
}
int query(int x){
int ans=;
while(x) (ans+=s[x])%=mod,x-=lowbit(x);
return ans;
}
int main()
{
n=read(); m=read();
for(int i=;i<=n;i++) k[i]=read(),f[i]=,q[i]=(node){k[i],i};
sort(q+,q++n,cmp);
d[++cnt]=q[].w; pos[q[].pos]=;
for(int i=;i<=n;i++){
if(q[i].w!=q[i-].w) d[++cnt]=q[i].w;
pos[q[i].pos]=cnt;
}
for(int i=;i<=m;i++) b[i]=read();
for(int i=;i<=m;i++){
for(int j=;j<=cnt;j++){
int p=last[j-];
while(p<cnt&&d[p+]+b[i-]<=d[j]+b[i]) p++;
last[j]=p;
}
for(int j=;j<=cnt;j++) s[j]=;
add(pos[i-],f[i-]);
for(int j=i;j<=n;j++){
int sum=f[j];
f[j]=query(last[pos[j]]);
add(pos[j],sum);
}
}
for(int i=m;i<=n;i++) (ans+=f[i])%=mod;
printf("%d\n",ans);
return ;
}
汕头市队赛 SRM 08 B的更多相关文章
- 汕头市队赛 SRM 08 C
C-3 SRM 08 描述 给一个图,n 个点 m 条双向边,每条边有其长度.n 个点中有 k 个是特殊点,问任意两个特殊点的最短路是多少. 输入格式 第一行三个整数 n m k 第二行 k 个整数 ...
- 汕头市队赛 SRM 08 A
比赛没参加 所以回来补题咯 A还是自己YY出来了的 可惜比赛没有打 描述 给一个 01 串设为其 S,询问是否存在只出现两次的 01 串 T. 这里的出现定义为存在一串下标 ,满足 且 . 输入格式 ...
- 汕头市队赛 SRM 07 D 天才麻将少女kpm
这道题放了很久还是回来补了 D 天才麻将少女KPM SRM 07 背景&&描述 天才麻将少女KPM立志要在日麻界闯出一番名堂. KPM上周叒打了n场麻将,但她这次又没控分,而且 ...
- 汕头市队赛SRM 20 T2不净的圣杯
不净的圣杯 SRM 20 背景 作为一张BUG级别的卡,官方打算把它修改得人畜无害一些…… 虽然名字还没想好,但是能力大概是对敌方所有单位造成d点伤害,d为自己牌组中所有卡的编号的最大公约数.这无疑是 ...
- 汕头市队赛 SRM 07 B 好玩的麻将
B 好玩的麻将 SRM 07 背景&&描述 天才麻将少女KPM立志要在日麻界闯出一番名堂. KPM上周又打了n场麻将,又控了分使得自己的排名是1..n的一个排列. 但她 ...
- 汕头市队赛 SRM 06 C 秀恩爱
C 秀恩爱 SRM 06 背景&&描述 KPM坐在直升机上俯瞰小渔村景象. 渔村可看作二维平面,密密麻麻地到处都是单身狗,KPM当前所在坐标为(sx,s ...
- 汕头市队赛 SRM 06 A 撕书
A 撕书 SRM 06 背景&&描述 游行寺汀正在杀书. 书总共有n页,每页都可以看作是一个小写英文字母,所以我们可以把书看成长度为n的字符串s. 琉璃 ...
- 汕头市队赛 SRM 06 B 起伏的排名
B 起伏的排名 SRM 06 背景&&描述 天才麻将少女KPM立志要在日麻界闯出一番名堂. 在上个星期她打了n场麻将,每场麻将都有n名玩家.KPM自然记得自己的n次排名. ...
- 汕头市队赛 SRM 07 A 你的麻将会排序吗
A 你的麻将会排序吗 SRM 07 曾经有过一些沉迷日麻的小孩纸,后来呀,他们都去寻找自己的世界了. kpm也是这样的小孩纸.他想有一只自动整理牌的机器.当麻将以给定的顺序进入机器时,通过机器的运转, ...
随机推荐
- IDEA工具配置weblogic
1.首先打开IDEA,点击Run-Edit Configurations… 2.配置weblogic页面 2.1点击“+”号,选WeblogicServer-local 2.2红框的是新添加的服务,起 ...
- Linux两种方式rd.break和init重置root管理员密码
centos7/rhel7进入单用户方式和重置密码方式发生了较大变化,GRUB由b引导变成了ctrl+x引导. 重置密码主要有rd.break和init两种方法. rd.break方法: 1.启动的时 ...
- 菜鸟教程perl总结
数据类型有: 标量$, 数组@,哈希% 数组声明 : @hits = (25, 30, 40); 或者 @sites = qw/google taobao runoob/; 数组操作 pop, ...
- 使用Windows Live Writer写文章时不要用360清除垃圾
ref:http://www.zhengsiwei.com/write-an-article-to-use-windows-live-writer-dont-use-360-to-remove-rub ...
- 方法的重写(Override)与重载(Overload)的含义与区别
1.Override(重写) 两同,两小,一大 两同:方法名相同,参数列表相同 两小:抛出的异常要小于等于父类,返回值类型要小于等于父类 一大:访问权限要大于等于父类 2.Overload(重载) 方 ...
- saltstack特点
目录 saltstack特点 saltstack特点 实时交互 所有的minion机器同时执行命令 no freeloader 每一台salt minion上都装有执行master传来的命令所需要的程 ...
- 十三、MySQL之IDE工具介绍及数据备份
一.IDE工具介绍 生产环境还是推荐使用mysql命令行,但为了方便我们测试,可以使用IDE工具 下载链接:https://pan.baidu.com/s/1bpo5mqj 二.MySQL数据备份 # ...
- html+css调用服务器端字体
在浏览网页时,由于客户端没有安装某些特殊字体,导致网页文字无法按设计正常显示,这时我们可以使用服务器字体来避免这种现象的发送 语法 @font-face { /* 自定义字体名称 */ font-fa ...
- [Jenkins]持续集成环境下fingbug插件的安装使用与配置
参考:https://wiki.jenkins.io/display/JENKINS/FindBugs+Plugin 突然,天降杂事.我是想安安静静的做个美丽的测试...但是事与愿违,项目经理叫我帮忙 ...
- Android 导出traces.txt 遇到的坑
我一直以为traces.txt 导出需要root .因为每当我 cd data ll 然后就会告诉我 Permission denied 后来我问同事,怎么导出traces.txt 文件.同事说很简单 ...