汕头市队赛 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也是这样的小孩纸.他想有一只自动整理牌的机器.当麻将以给定的顺序进入机器时,通过机器的运转, ...
随机推荐
- 申请qq第三方登录 http://www.php20.com/forum.php?mod=viewthread&tid=29 (出处: 码农之家)
百度 qq互联 进入网站 按图中的步骤申请第三方登录即可 先申请成为开发者 审核通过后再继续操作 提交 后列表中会出现提交的申请. 状态为审核中,审核通过会得到下图. 点查看 红线后面就是appi ...
- 关于PHPExcel 基础使用方法
$dir=dirname(__FILE__);//找到当前脚本所在路径require_once $dir.'/PHPExcel/PHPExcel.php';$objPHPExcel=new PHPEx ...
- vue 点击当前元素添加class 去掉兄弟的class
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- PHP表单安全过滤和防注入 htmlspecialchars() 和test_input()
什么是 htmlspecialchars() 函数? htmlspecialchars() 函数把特殊字符转换为 HTML 实体.这意味着 < 和 > 之类的 HTML 字符会被替换为 & ...
- sigaction函数
sigaction函数是设置信号处理的接口.比signal函数更健壮 #include <signal.h> int sigaction(int signum, const struct ...
- centos安装Linux
CentOS下安装Redis Redis是一种高级key-value数据库.它跟memcached类似,不过数据可以持久化,而且支持的数据类型很丰富.有字符串,链表,集 合和有序集合.支持在服务器端计 ...
- (A)eclipse搭建springboot项目入门
网上许多资料都是用idea的,但是我个人用eclipse习惯了,所以就在eclipse里面自己尝试着写了一个hello. 然而项目建好后却迟迟不能访问!!!网上搜了许多资料都不靠谱! 虽然最后能看到h ...
- USACO Section2.2 Subset Sums 解题报告 【icedream61】
subset解题报告------------------------------------------------------------------------------------------ ...
- ffifdyop
题目地址:http://www.shiyanbar.com/ctf/2036 后台登陆 上来看到这个界面,果断先看一波源代码. 看到是拼接字符串进行sql查询,就想到了注入了. 但是很不幸的是md5( ...
- 一个初学者的辛酸路程-依旧Django
回顾: 1.Django的请求声明周期? 请求过来,先到URL,URL这里写了一大堆路由关系映射,如果匹配成功,执行对应的函数,或者执行类里面对应的方法,FBV和CBV,本质上返回的内容都是字符串 ...