如何将两个递增数组合并为1个,并保证合并后的数组依然单调递增,时间复杂度要求 O(N)。
为避免大量输入输出占用过多时间,本题目提供随机数种子方式进行输入输出。
请在你的代码中添加如下代码:
using lint=long long; mt19937 gen; void init(lint seed){ gen.seed(seed); } lint pre=0; lint get_lint(){ lint curr=gen()%1000+1000+pre; pre=curr; return curr; } using lint=long long; lint get_hash(lint c[],lint length,lint seed){ lint res=0; for(int i=1;i<=length;i++){ res=(res*seed%998244353+c[i])%998244353; if(res<0) res+=998244353; } if(res<0) res+=998244353; return res; }
为了避免大量输入占用过多时间,本题目输入采用 seed 方式提供输入。 输入文件有两个整数,n 和 seed 。n 如题目所述, seed 表示随机数种子。 开始读入数据之前,请记得你的程序运行了 init(seed) 函数。
之后,调用一次 get_lint() 即可获取一个输入。
所以,你应该 调用 2*n 次 get_lint() ,获取完整输入。
为了避免大量输出占用过多时间,你只需要输出 hash 值。hash 函数已经提供。 你只需要将长度为 2*n 的数组(请保证下标从 1 开始 )传入 get_hash 函数即可。
例如,你的数组名叫 arr_c ,那么,你只需要输出 get_hash(arr_c,2*n,seed) 函数的值即可。不需要对函数体进行任何修改。
5 10
820057608
N <= 1e7 。