1048 Find Coins

难得自己想到还能一遍过,流泪

#include <stdio.h>
#include <algorithm>
#include <string.h>

int n,m;
int val[1000+5];//钱数最大为1000
int c[100000+5];

int cmp(const void * a, const void * b){
	return (*(int *)a - *(int *)b);
}

int main(){
	freopen("in.txt","r",stdin);

	memset(val,0,sizeof(val));

	scanf("%d%d",&n,&m);	
	for(int i = 0; i < n; i++){
		int coin;
		scanf("%d", &coin);
		val[coin] ++;//以防止重复面值
		c[i] = coin;
	}

	qsort(c, n, sizeof(int), cmp);

	bool isFound = false;
	int i;
	for(i = 0; i < n; i++){
		if(c[i] >= m){
			break;
		}
		int remain = m - c[i];
		if(c[i] == remain){//正好是m的一半
			if(val[remain]>=2){
				isFound = true;
				break;
			}
		}else if(val[remain] > 0){
			isFound = true;
			break;
		}
	}

	if(isFound){
		printf("%d %d",c[i], m-c[i]);
	}else{
		printf("No Solution");
	}

	
	return 0;
}


你可能感兴趣的:(1048 Find Coins)