(每日一练c++)倍数问题

倍数问题

题目描述

众所周知,小葱同学擅长计算,尤其擅长计算一个数是否是另外一个数的倍数。但小葱只擅长两个数的情况,当有很多个数之后就会比较苦恼。现在小葱给了你 n 个数,希望你从这 n 个数中找到三个数,使得这三个数的和是 K 的倍数,且这个和最大。数据保证一定有解。

输入格式

从标准输入读入数据。

第一行包括 2 个正整数 n, K。

第二行 n 个正整数,代表给定的 n 个数。

输出格式

输出到标准输出。

输出一行一个整数代表所求的和。

样例输入

4 3
1 2 3 4

样例输出

9

样例解释

选择2、3、4。
int N, k;
int main()
{ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);cin >> N >> k;vector> vec(k, vector(3, -1));for (int i = 0; i < N; ++i){int temp;cin >> temp;int y = temp % k;if (temp > vec[y][0]){vec[y][2] = vec[y][1];vec[y][1] = vec[y][0];vec[y][0] = temp;}else if (temp > vec[y][1]){vec[y][2] = vec[y][1];vec[y][1] = temp;}else if (temp > vec[y][2])vec[y][2] = temp;}vector ans(3);int result = 0;for (int i = 0; i < k; ++i)for (int j = i; j < k; ++j){int r = (k - i + k - j) % k;ans[0] = vec[i][0];if (i == j){ans[1] = vec[i][1];if (r == i)ans[2] = vec[i][2];elseans[2] = vec[r][0];}else{ans[1] = vec[j][0];if (r == i)ans[2] = vec[i][1];else if (r == j)ans[2] = vec[j][1];elseans[2] = vec[r][0];}if (ans[0] != -1 && ans[1] != -1 && ans[2] != -1 && ans[1] + ans[2] + ans[0] > result)result = ans[1] + ans[2] + ans[0];}cout << result;
}


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部