列表

详情


NC232437. 小沙的痛苦

描述

    小沙出题遇到一个非常痛苦的事情,他出题如果出的过于毒瘤,那么这个题目就会被打回,如果过于简单,那么小沙自己会感到非常的内疚。
    小沙在不断的增加题目难度,打回,降低题目难度,打回的过程中暴发的,他觉得题目的难度太难控制了,所以他便出了这么一道简单题。
    给定你个数,你可以选择任意两个数字相加,使他们相加之后对取余的值最大。(注意是取余后的值最大,不是取余前)。
    现在小沙想问你,这个最大的值是多少。

输入描述

第一行输入两个整数n,p,代表给定的数字数量和模数
第二行输入个整数

对于30%的数据有
对于100%的数据有

输出描述

输出一个数字,代表最大值。

示例1

输入:

5 7
3 3 4 4 5

输出:

6

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 533ms, 内存消耗: 4316K, 提交时间: 2022-04-10 15:15:50

#include<bits/stdc++.h>
using namespace std;
int n;
int p;
int a[1000005];
int main()
{
	cin>>n>>p;
	for(int i=0;i<n;i++)
	{
		int x;
		cin>>x;
		a[i]=x%p;
	}
	sort(a,a+n);
	int ans=(a[n-2]+a[n-1])%p;
	for(int i=0;i<n;i++)
	{
		int pos=lower_bound(a,a+n,p-a[i])-a;
		if(pos-1>i)
		{
			ans=max(ans,(a[i]+a[pos-1])%p);
		}
	}
	cout<<ans;
}

上一题