每天早上,第i个异次元空间会增加个暗黑物质。
每天中午,如果某异次元空间的暗黑物质数量大于等于(保证为质数),则该异次元空间会有个暗黑物质产生反应而消失,直到剩余的暗黑物质少于个。
每天晚上,对于每个异次元空间,牛牛都可以选择是否冻结/解冻该空间。当异次元空间被冻结时,这个异次元空间无法继续产生暗黑物质。(第0天晚上也可以进行冻结操作)
现在牛牛想知道,最少可以在第几天的晚上有不少于m个异次元空间有刚好k个暗黑物质。
3,2,5,[1,0,3],[2,2,1],2
3
第0天晚上牛牛冻结第二个空间第一天晚上各个空间物质数量为[3,0,4],牛牛不进行操作第二天晚上各个空间物质数量为[0,0,4],此时牛牛为第二个空间解冻第三个晚上各个空间物质数量为[2,2,1],此时已经有两个空间有刚好2个物质,满足条件
第一个参数n代表异次元空间数目
第二个参数为整数m,含义见题面
第三个参数为整数P,含义见题面
第四个参数vector a包含n个元素代表每个异次元空间一开始的暗黑物质数目
第五个参数vector b包含m个元素代表每个异次元空间每天增加的暗黑物质数目
第六个参数为整数k,含义见题面
class Solution { public: /** * 异次元空间 * @param n int整型 * @param m int整型 * @param P int整型 * @param a int整型vector * @param d int整型vector * @param k int整型 * @return int整型 */ void exgcd(int a, int b, long& x, long& y){ if(b==0){ x = 1; y = 0; return; } exgcd(b, a%b, y, x); y -= a/b * x; return; } int solve(int n, int m, int P, vector<int>& a, vector<int>& d, int k) { int r[n]; for(int i=0;i<n;i++){ long x, y; exgcd(d[i], P, x, y); long t = k - a[i]; r[i] = (t*x%P + P) % P; } sort(r, r+n); return r[m-1]; } };