Zero Remainder Array (数学,思维 , STL)

时间:2020-09-06
本文章向大家介绍Zero Remainder Array (数学,思维 , STL),主要包括Zero Remainder Array (数学,思维 , STL)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Zero Remainder Array

原题链接:传送门

题目大意

给你一个数组有n个正数,你想让这个数组都变成可以整除 k 的元素,你可以执行两种操作:

1.将ai + x ,然后 x ++

2.仅x++

一开始x = 0 ,求一共最少需要多少次操作可以使得满足上述条件,且输出最终的 x

分析

我们只需要记录下来每个数t距离k的模数就可以了:

即 k - (t % k) , 如果这个模数已经出现过那么我们需要再加上一个 k 来到下一个满足要求的最小位置即可。 由于数据范围很大我们可以利用map来进行保存取模后的距离。

AC 代码

AC code

void slove()
{
	int n , k;cin >> n >> k;
	map<ll,ll> m; 
	ll x = 0 , t = 0 , flag = 0;
	for(int i = 0;i < n ;i ++)
	{	
		cin >> t ;
		if(t % k == 0)continue;
		flag = 1;
		int y = k - (t % k);
		int val = m[y];
		x = max(x ,(ll)val * k + y);
		m[y]++;
	}
	if(flag)cout << x + 1 << endl;
	else cout << 0 << endl;
}

原文地址:https://www.cnblogs.com/wlw-x/p/13622742.html