[ create a new paste ] login | about

Link: http://codepad.org/95QHFMeb    [ raw code | fork ]

hoaithu.melody - C++, pasted on Jun 5:
//TheFrog
#include <iostream>
using namespace std;

const int MAXN = 209;
const unsigned int MAX_VAL = ~0;
int MAX_VALUE, T, N, data[MAXN][3], d[MAXN][MAXN], selected[MAXN], distan[MAXN], cnt;
void formatData() {
	for (int i=1; i<=N; i++) {
		selected[i] = distan[i] = 0;
		for (int j=1; j<=N; j++) {
			d[i][j] = 0;
		}
	}
}
bool nhay_gan(int x, int y, int xNext, int yNext, int r1, int r2) {
	if ((x - xNext) * (x - xNext) + (y - yNext) * (y - yNext) <= (r1 + r2 + 40) * (r1 + r2 + 40)) {
		return true;
	} else {
		return false;
	}
}

bool nhay_xa(int x, int y, int xNext, int yNext, int r1, int r2) {
	if ((x - xNext) * (x - xNext) + (y - yNext) * (y - yNext) <= (r1 + r2 + 90)	* (r1 + r2 + 90)) {
		return true;
	} else {
		return false;
	}
}
int main() {
	ios::sync_with_stdio(false);
	//freopen("input.txt", "r", stdin);
	MAX_VALUE = MAX_VAL >> 1;
	cin>>T;
	for (int tc=1; tc<=T; tc++) {
		cin>>N;
		formatData();
		for (int i=1; i<=N; i++) {
			cin>>data[i][0]>>data[i][1]>>data[i][2];
		}

		for (int i=1; i<=N; i++) {
			for (int j=i+1; j<=N; j++) {
				if (nhay_gan(data[i][0], data[i][1], data[j][0], data[j][1], data[i][2], data[j][2])) {
					d[i][j] = d[j][i] = 1;
				} else if (nhay_xa(data[i][0], data[i][1], data[j][0], data[j][1], data[i][2], data[j][2])) {
					d[i][j] = d[j][i] = 1000;
				} else {
					d[i][j] = d[j][i] = MAX_VALUE;
				}
			}
		}
		selected[1] = 1;
		cnt = 1;
		for (int i=1; i<=N; i++) {
			distan[i] = d[1][i];
		}
		while (cnt != N) {
			int w=0, dmin = MAX_VALUE;
			for (int i=1; i<=N; i++) {
				if (distan[i] <= dmin && selected[i] == 0) {
					dmin = distan[i];
					w = i;
				}
			}
			
			selected[w] = 1;
			cnt++;
			for (int j=1; j<=N; j++) {
				int d1 = d[w][j] == MAX_VALUE || d[w][j] + distan[w] < 0 ? MAX_VALUE : d[w][j] + distan[w];
				distan[j] = min(distan[j], d1);
			}
		}
		//cout<<"Case #"<<tc<<endl;
		if (distan[N] == MAX_VALUE) {
			cout<<"-1"<<endl;
		} else {
			cout<<distan[N]/1000<<" "<<distan[N]%1000<<endl;
		}
	}
}


Output:
No errors or program output.


Create a new paste based on this one


Comments: