汕头市队赛 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也是这样的小孩纸.他想有一只自动整理牌的机器.当麻将以给定的顺序进入机器时,通过机器的运转, ...
随机推荐
- HTML+CSS : 笔记整理(3 移动端布局简单了解)
流体布局:宽度用百分比,计算真实宽度用函数 : width: calc(25% - 4px); box-sizing: 1.content-box:默认计算方式 ,宽度和高度分别应用到元素的内容框.在 ...
- <Docker学习>3. docker镜像命令使用
镜像提供容器运行时所需要的程序,资源.配置文件等,是一个特殊的文件系统.是容器运行的基础.镜像是多层文件系统组成的,是一个分层存储的架构,在镜像的构建中,会一层层的构建,每一层构建完成就不会发生改变, ...
- C语言进阶——浮点数的秘密03
浮点数在内存中的储存方式为:符号位 指数位 尾数 float和double类型的数据在计算机内部的表实方法是一样的,但是由于所占的存贮空间的不同,其分别能表示的数值范围和精度不同. 类型 f符号位 指 ...
- G - Dreamoon and NightMarket Gym - 101234G 优先队列+思路
题目:题目链接 题意:给出n种食物,食物有自己的价格并且可以自由搭配,每天吃之前没吃过的花费最少的搭配,问第k天的花费. 思路:第k小我们考虑用优先队列处理,虽然n比较大,但由于1 ≤ K ≤ min ...
- POJ:3126-Prime Path
题目链接:http://poj.org/problem?id=3126 Prime Path Time Limit: 1000MS Memory Limit: 65536K Total Submiss ...
- zookeeper: web ui工具的安装
zookeeper官方没有提供web用户界面,这使很多人在使用zookeeper(动物管理员)同时,并不是很容易的理解zookeeper的数据结构,还好淘宝有位大神用Nodejs写了一个web的ui工 ...
- 挂个AC自动机
struct ACM{ ],f[N],cnt[N]; int sz,rt; int ins(char *s){ int n=strlen(s),u=rt; ;i<n;i++){ int c=s[ ...
- thinkPHP 表单自动验证功能
昨天晚上我们老大叫我弄表单自动验证功能,愁了半天借鉴了好多官网的知识,才出来,诶,总之分享一下我自己的成果吧! thinkphp 在Model基类为我们定义了自动验证的函数和正则表达式,我们只需要在对 ...
- Jforum环境搭建
前提:搭建好JDK.JRE.Tomcat.数据库 1.之前安装了Navicat Premium,所以直接用这个创建名为jforum的MySQL数据库,默认密码为空,记得设置密码,因为Jforum要用到 ...
- ssl证书原理
SSL证书(HTTPS)背后的加密算法 SSL证书(HTTPS)背后的加密算法 之前我们介绍SSL工作原理了解到当你在浏览器的地址栏上输入https开头的网址后,浏览器和服务器之间会在接下来的几百毫秒 ...