为了使得总和最大,每次操作一定是让最大值和次大值相乘,然后将得到的结果作为最大值,再进行计算,直到执行m次。
实际操作中可以对原数组进行排序,然后按照上述方式模拟即可。
数据范围较大,C++和Java选手需要注意爆int
你面前有一排 n 个能量模块,第 i 个模块的初始能量值为正整数 ai。一次调谐操作可以选择两个不同的模块,将它们的能量值替换为两个正整数 x 和 y,使得替换前后这两个模块能量值的乘积不变,即 x×y=ai×aj。你最多可以进行 m 次调谐操作,目标是让所有模块的能量总和尽可能大。请你计算这个最大可能的总和,并对 109+7 取模后输出。约束:1≤m<n≤100000,1≤ai≤100000。
第一行包含两个整数 n 和 m,分别表示能量模块的数量和最多可执行的调谐操作次数;第二行包含 n 个整数 a1,a2,…,an,表示每个模块的初始能量值。
输出一个整数,表示经过至多 m 次调谐操作后所有模块能量总和的最大值对 109+7 取模的结果。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.