Increasing Speed Limits
Increasing Speed Limits |
Time Limit: 2000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) |
Total Submission(s): 186 Accepted Submission(s): 86 |
Problem Description
You were driving along a highway when you got caught by the road police for speeding. It turns out that they\'ve been following you, and they were amazed by the fact that you were accelerating the whole time without using the brakes! And now you desperately need an excuse to explain that.
You've decided that it would be reasonable to say "all the speed limit signs I saw were in increasing order, that\'s why I've been accelerating". The police officer laughs in reply, and tells you all the signs that are placed along the segment of highway you drove, and says that's unlikely that you were so lucky just to see some part of these signs that were in increasing order. Now you need to estimate that likelihood, or, in other words, find out how many different subsequences of the given sequence are strictly increasing. The empty subsequence does not count since that would imply you didn't look at any speed limits signs at all! For example, (1, 2, 5) is an increasing subsequence of (1, 4, 2, 3, 5, 5), and we count it twice because there are two ways to select (1, 2, 5) from the list. |
Input
The first line of input gives the number of cases, N. N test cases follow. The first line of each case contains n, m, X, Y and Z each separated by a space. n will be the length of the sequence of speed limits. m will be the length of the generating array A. The next m lines will contain the m elements of A, one integer per line (from A[0] to A[m-1]).
Using A, X, Y and Z, the following pseudocode will print the speed limit sequence in order. mod indicates the remainder operation. for i = 0 to n-1 Note: The way that the input is generated has nothing to do with the intended solution and exists solely to keep the size of the input files low. 1 ≤ m ≤ n ≤ 500 000 |
Output
For each test case you should output one line containing "Case #T: S" (quotes for clarity) where T is the number of the test case and S is the number of non-empty increasing subsequences mod 1 000 000 007.
|
Sample Input
2 |
Sample Output
Case #1: 15 |
Source
2009 Multi-University Training Contest 6 - Host by WHU
|
Recommend
gaojie
|
/*
题意:按照题目给出的循环条件:
for i = 0 to n-1
print A[i mod m]
A[i mod m] = (X * A[i mod m] + Y * (i + 1)) mod Z
求出一个长度为n的序列A,然后求数列A的严格递增的子序列的个数
例如第一组样例,按照循环条件求出的序列为 1,2,1,2,3(不要怀疑,这就是按照循环来求出来的)
递增子序列为:
{1},{2},{1},{2},{3},
{1,2},{1,2},{1,3},{2,3},{1,2},
{1,3},{2,3},{1,2,3},{1,2,3},{1,2,3}. 初步思路:树状数组求递增子序列
*/ #include<bits/stdc++.h>
#define N 500010
#define mod 1000000007
#define lowbit(x) x&(-x)
using namespace std;
struct node
{
int id;
long long w;
bool operator< (const node& b)const{
return w<b.w;
} }s[N];
long long n,m,x,y,z;
long long t;
long long A[N];
long long mapn[N];///用于映射数组,标记元素的id
long long c[N];
int len =;///用于标记去重后的序列长度
long long res=;
void update(int x,int val){
while(x<N){
c[x]+=val;
c[x]%=mod;
x+=lowbit(x);
}
}
long long getsum(int x){
long long res=;
while(x>){
res+=c[x];
res%=mod;
x-=lowbit(x);
}
return res;
}
void init(){
memset(c,,sizeof c);
res=;
}
int main(){
// freopen("in.txt","r",stdin);
scanf("%d",&t);
for(int ca=;ca<=t;ca++){
printf("Case #%d: ",ca);
init();
scanf("%lld%lld%lld%lld%lld",&n,&m,&x,&y,&z);
for(int i=;i<m;i++){
scanf("%lld",&A[i]);
}
for(int i=;i<n;i++){///因为树状数组0这位是处理不到的所以坐标整个向右平移以为
s[i+].w=A[i%m]+;
s[i+].id=i+;
A[i%m]=(x*A[i%m]+y*(i+))%z;
} // for(int i=1;i<=n;i++){
// cout<<s[i].w<<" ";
// }cout<<endl; sort(s+,s+n+);///排好序然后用树状数组进行求最长上升子序列
int cur=;
for(int i=;i<=n;i++){
if(s[i].w==s[i-].w)
mapn[s[i].id]=cur;
else
mapn[s[i].id]=++cur;
} // for(int i=1;i<=n;i++){
// cout<<mapn[s[i]]<<" ";
// }cout<<endl; long long ans=;
for(int i=;i<=n;i++){
update(mapn[i],getsum(mapn[i]-)+);
}
printf("%d\n",getsum(n));
}
return ;
}
Increasing Speed Limits的更多相关文章
- hdu 3030 Increasing Speed Limits (离散化+树状数组+DP思想)
Increasing Speed Limits Time Limit: 2000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java ...
- HDU 3030 - Increasing Speed Limits
Problem Description You were driving along a highway when you got caught by the road police for spee ...
- HDU题解索引
HDU 1000 A + B Problem I/O HDU 1001 Sum Problem 数学 HDU 1002 A + B Problem II 高精度加法 HDU 1003 Maxsu ...
- poj 2501 Average Speed
Average Speed Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4842 Accepted: 2168 Des ...
- 使用OpenMP加快OpenCV图像处理性能 | speed up opencv image processing with openmp
本文首发于个人博客https://kezunlin.me/post/7a6ba82e/,欢迎阅读! speed up opencv image processing with openmp Serie ...
- poj3311 Hie with the Pie (状态压缩dp,旅行商)
Hie with the Pie Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 3160 Accepted: 1613 ...
- 2014-2015 ACM-ICPC, NEERC, Moscow Subregional Contest C. CIA Datacenter
C. CIA Datacenter time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- 状态压缩 DP
D - Hie with the Pie Crawling in process... Crawling failed Time Limit:2000MS Memory Limit:65536 ...
- 专题:mdadm Raid & LVM
>FOR FREEDOM!< {A} Introduction Here's a short description of what is supported in the Linux R ...
随机推荐
- JavaScript一些常用方法一
整理以前的笔记,在学习JavaScript时候,经常会用到一些方法,但是有时忘掉了具体用法,因此记下.方便以后查阅. 这篇博文先说明这些方法的用途: splice().push().pop() .sh ...
- JS中this到底指哪个对象
忘了原作者是谁了 自己也添加了一些东西 勉强可以观看一下 元素就不写了 可以自己添一下试试 先看这段代码 target.onclick = function(){ console.log(t ...
- 使用VUE模仿BOSS直聘APP
一.碎碎念: 偶尔在群里看到一个小伙伴说:最近面试的人好多都说用vue做过一个饿了么.当时有种莫名想笑. 为何不知道创新一下?于是想写个DEMO演练一下.那去模仿谁呢?还是BOSS直聘(跟我没关系,不 ...
- 程序编译没错,运行报错:无法定位程序输入点GT_BufLaserFollowRatio(这是函数)于动态链接库GTS.DLL上
:DLL里面没有导出该函数 :DLL没放进DEBUGS文件夹 (当时的情况是这个)
- CentOSv6.8 修改防火墙配置、修改SSH端口
查看防火墙目前使用状况: service iptables status 修改防火墙配置: vi /etc/sysconfig/iptables 重启防火墙,让刚才修改的配置生效: service i ...
- 01背包java实现(入门到精通)
一.什么是01背包 01背包是在M件物品取出若干件放在空间为W的背包里,每件物品的体积为W1,W2至Wn,与之相对应的价值为P1,P2至Pn.01背包是背包问题中最简单的问题.01背包的约束条件是给定 ...
- Python单元测试框架
目录 概况 系统要求 使用PyUnit构建自己的测试 安装 测试用例介绍 创建一个简单测试用例 复用设置代码:创建固件 包含多个测试方法的测试用例类 将测试用例聚合成测试套件 嵌套测试用例 测试代码的 ...
- JAVA提高二:枚举
JDK5.0中有一个非常有用的特性:枚举,这个特性以前在C语言中出现过,后来JDK出现后,开始觉得没有必要,但随着使用JAVA语言的人数增多,发现大家对枚举的需求非常大,于是又加入了此特性,下面我们来 ...
- firewalld 操作实践
1.firewalld 从名称上看,模仿的是硬件防火墙的概念,zone. 所有的接口都必须属于某个zone . 在zone内配置规则. 2. 常用的方法是 增加对一个tcp或者udp端口号的允许通过 ...
- cocos2dx - 在MFC中使用cocos2dx
本节主要讲一下如何在MFC窗口中使用cocos2dx 在做比较复杂的游戏,有时需要通过一些工具来编辑生成关卡或者特效,技能等的配置文件.为了方便配置,需要可以通过修改参数直观得到显示的效果.这就需要将 ...