您的位置:首页 > 产品设计 > UI/UE

2017 Multi-University Training Contest - Team 2:1003&hdu6047、Maximum Sequence

2017-07-27 18:05 405 查看

题目:

Maximum Sequence

Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 0    Accepted Submission(s): 0


[align=left]Problem Description[/align]
Steph is extremely obsessed with “sequence problems” that are usually seen on magazines: Given the sequence 11, 23, 30, 35, what is the next number? Steph always finds them too easy for such a genius like
himself until one day Klay comes up with a problem and ask him about it.

Given two integer sequences {ai} and {bi} with the same length n, you are to find the next n numbers of {ai}:an+1…a2n.
Just like always, there are some restrictions on an+1…a2n:
for each number ai,
you must choose a number bk
from {bi}, and it must satisfy ai≤max{aj-j│bk≤j<i},
and any bk
can’t be chosen more than once. Apparently, there are a great many possibilities, so you are required to find max{∑2nn+1ai}
modulo 109+7
.

Now Steph finds it too hard to solve the problem, please help him.

 

[align=left]Input[/align]
The input contains no more than 20 test cases.

For each test case, the first line consists of one integer n. The next line consists of n integers representing {ai}. And the third line consists of n integers representing {bi}.

1≤n≤250000, n≤a_i≤1500000, 1≤b_i≤n.

 

[align=left]Output[/align]
For each test case, print the answer on one line: max{∑2nn+1ai}
modulo 109+7。
 

[align=left]Sample Input[/align]

4
8 11 8 5
3 1 4 2

 
[align=left]Sample Output[/align]

27
Hint
For the first sample:
1. Choose 2 from {bi}, then a_2…a_4 are available for a_5, and you can let a_5=a_2-2=9;
2. Choose 1 from {bi}, then a_1…a_5 are available for a_6, and you can let a_6=a_2-2=9;

题意:给你长度为n的两个数组a和b。求an+1…a2n。。满足两个条件:在数组b中选择bk,ai≤max{aj-j│bk≤j<i},而且bk只能用一次。1≤n≤250000,
n≤a_i≤1500000, 1≤b_i≤n.所以用__int64。

思路:不知道怎么讲,就是求aj-j的值给数组c。a_n+1~a_2*n就是max(c[j>=b[i]]),自己动手写下就明白了。例如:an+1…a

a_i   8 11 8 5 9 9 5 4

a_i-i 7 9  5 1 4 3 -2 -4

b_i   3 1  4 2

所以答案为9+9+5+4=27.

CODE:

#include<bits/stdc++.h>
using namespace std;
#define maxn 250005
__int64 a[maxn],b[maxn],c[maxn];
int main()
{
int n,i;
__int64 maxr,sum,mod=1e9+7;
while(~scanf("%d",&n)){
for(i=1;i<=n;i++){
scanf("%I64d",&a[i]);
a[i]-=i;
if(i>1) maxr=max(maxr,a[i]);
else maxr=a[i];
}
maxr-=(n+1);
for(i=n;i>=1;i--){
c[i]=max(maxr,a[i]);
if(i<n) c[i]=max(c[i],c[i+1]);
}
sum=0;
for(i=1;i<=n;i++){
scanf("%I64d",&b[i]);
sum=(sum+c[b[i]])%mod;
}
printf("%I64d\n",sum);
}
return 0;
}


b_ian+1…a2n
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  思维题
相关文章推荐