石家庄集训T1 divisibility

题目就不粘了,毕竟我发现各大oj上没有,也许是自己出的题,保护个人财产(哇,我好棒)

好晚了,瞌睡,直接贴代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#define MAXN 1000006
int n,k,m;
using namespace std;
struct Node{
	int a,p;
}s[MAXN];
int cnt[MAXN];
int flag=0;
bool cmp(Node x,Node y)
{
	return x.a<y.a;
}
int tt;
int main()
{
//	freopen("divisibility.in","r",stdin);
//	freopen("divisibility.out","w",stdout);
	scanf("%d%d%d",&n,&k,&m);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&s[i].a);
		s[i].p=s[i].a%m;
		cnt[s[i].p]++;
		if(cnt[s[i].p]>=k)
			flag=1;
	}
	int inc=0;
	int pos=0; 
	if(!flag)
		cout<<"No"<<endl;
	else
	{
		cout<<"Yes"<<endl;
		sort(s+1,s+n+1,cmp);//找出最小值最小的 
		for(int i=1;i<=n;i++)
			if(cnt[s[i].p]>=k){
				tt=s[i].p;
				pos=i;
				break;
			}
		for(int i=pos;i<=n&&inc!=k;i++)
			if(s[i].p==tt){
				inc++;
				printf("%d ",s[i].a);
			}
	}
	return 0;
}

嗯呐,虽然和题解很像,但是,这是我自己打的哟,不是抄题解!!!!!对(有我的思考)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值