View Code of Problem 12

#include <stdio.h>

#define NUM 10
#define D 0.0000001
#define c 299792458
// 0 == US, 1 == YES, 2 == AWAY, 3 == time, 4 == next;

int main()
{
	int N, data[NUM], k = 0, l, i, j, disp[NUM], count[NUM], newnum[NUM];
	double f0[NUM], f1[NUM], v[NUM], dist[NUM];

	scanf("%d", &N);

	for(i = 0; i < N; i++){
		scanf("%d%lf%lf%d", &data[i], &f0[i], &f1[i], &disp[i]);
	}

	for(i = 0; i < N; i++){
		if(1 == data[i]){
			count[i] = 0;
		}
		else{
			v[i] = (double)(f1[i] - f0[i]) * c/ (f0[i] + f1[i]);
			dist[i] = (double)disp[i] * 0.000001 * c / 2;

			if(dist[i] <= 200000.0){
				if(f0[i] - f1[i] < D){
					newnum[k++] = i;
				}
				else{
					count[i] = 2;
				}
			}
			else if(dist[i] > 200){
				count[i] = 4;
			}
		}
	}
	for(i = 0; i < k - 1; i++){
		l = i;
		for(j = i + 1; j < k; j++){
			if(newnum[j] < newnum[l]){
				l = j;
			}
			if(i != l){
				int temp = newnum[i];
				newnum[i] = newnum[l];
				newnum[l] = temp;
			}
		}
	}
	if(k <= 3){
		for(i = 0; i < 3; i++){
			count[newnum[i]] = 1;
		}
	}
	else{
		for(i = 0; i < 3; i++){
			count[newnum[i]] = 1;
		}
		for(i = 3; i < k; i++){
			count[newnum[i]] = 3;
		}
	}
	for(i = 0; i < N; i++){
		switch(count[i]){
		case 0: printf("Target%d:NO:ONE OF US\n", i + 1); break;
		case 1: printf("Target%d:YES\n", i + 1); break;
		case 2: printf("Target%d:NO:AWAY\n", i + 1); break;
		case 3: printf("Target%d:NO:NEXT TIME\n", i + 1); break;
		case 4: printf("Target%d:NO:%.4lf\n", i + 1, (dist[i] - 200000) / v[i]); break;
		default: printf("MGJ\n"); break;
		}
	}
	return 0;
}

Double click to view unformatted code.


Back to problem 12