Monday, March 13, 2017

UVa 10474 - Where is the Marble?

// UVa 10474 - Where is the Marble?

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

const int LIMIT = 10001;

int numberOfQueries;
int numberOfMarbles;
int count[LIMIT];
int sum[LIMIT];
int queries[LIMIT];
int caseNumber = 0;

bool readInput();
void sumCounts();
void solveQueries();

int main() {
	while (readInput()) {
		sumCounts();
		solveQueries();
	}
	return 0;
}

bool readInput() {
	scanf("%d", &numberOfMarbles);
	scanf("%d", &numberOfQueries);
	if (numberOfMarbles == 0 && numberOfQueries == 0)
		return false;

	caseNumber++;

	memset(count, 0, sizeof(count));

	for (int position = 1; position <= numberOfMarbles; position++) {
		int writtenOnMarble;
		scanf("%d", &writtenOnMarble);
		count[writtenOnMarble]++;
	}

	for (int i = 0; i < numberOfQueries; i++)
		scanf("%d", &queries[i]);

	return true;
}

void sumCounts() {
	memset(sum, 0, sizeof(sum));

	sum[0] = count[0];
	for (int i = 1; i <= LIMIT; i++)
		sum[i] = sum[i - 1] + count[i];
}

void solveQueries() {
	printf("CASE# %d:\n", caseNumber);
	for (int i = 0; i < numberOfQueries; i++) {
		int query = queries[i];
		if (count[query] == 0) {
			printf("%d not found\n", query);
		} else {
			int marblesBefore = query == 0 ? 1 : sum[query - 1];
			printf("%d found at %d\n", query, marblesBefore + 1);
		}
	}
}

No comments:

Post a Comment