Пример #1
0
int main() {
	int i, k, j;
	double sum_of_x, sum_of_y;
	double max_of_x, max_of_y;
	double min_of_x, min_of_y;
	double x_now, y_now;
	double x_add, y_add;
	double step;
	double dis, min;
	int con[4][2] = {0, 1, 0, -1, 1, 0, -1, 0};
	sum_of_x = sum_of_y = 0;
	max_of_x = max_of_y = 0;
	min_of_x = min_of_y = 99999;
	scanf("%d", &N);
	for(i = 0; i < N; i++) {
		scanf("%lf%lf", &x[i], &y[i]);
		sum_of_x += x[i], sum_of_y += y[i];
		if(x[i] > max_of_x)
			max_of_x = x[i];
		if(x[i] < min_of_x)
			min_of_x = x[i];
		if(y[i] > max_of_y)
			max_of_y = y[i];
		if(y[i] < min_of_y)
			min_of_y = y[i];
	}
	x_now = sum_of_x / N;
	y_now = sum_of_y / N;
	step = (max_of_x - min_of_x) + (max_of_y - min_of_y);
	while(step > P) {
		min = INF;
		for(i = 0; i < 4; i++) {
			dis = 0;
			x_add = x_now + con[i][0] * step;
			y_add = y_now + con[i][1] * step;
			for(k = 0; k < N; k++)
				dis += get_dis(x_add, y_add, x[k], y[k]);
			if(min > dis) {
				min = dis;
				j = i;
			}
		}
		dis = 0;
		for(i = 0; i < N; i++)
			dis += get_dis(x_now, y_now, x[i], y[i]);
		if(min < dis)
			x_now = x_now + con[j][0] * step, y_now = y_now + con[j][1] * step;
		else
			step /= 2;
	}
	printf("%.0lf\n", min);
	return 0;
}
Пример #2
0
double dis(point a, point b, point c) {
    double mul = ( (a - b) ^ (c - b) ) / (c - b).len();
    point dir = (c - b).set();
    point mid = dir * mul + b;
    if( sgn((mid - b) ^ (c - b) ) >= 0 && sgn((mid - c) ^ (b - c)) >= 0) {
        return fabs((a - b) * (c - b) / (c - b).len());
    }
    else return get_dis(a, b, c);
}
Пример #3
0
Файл: r1.c Проект: pengkh/proton
int main(int argc, char *argv[])
{

    prepare();

    base_info vm_base_info;

    vm_base_info.issue = get_dis();
    vm_base_info.hostname = get_hostname();
    vm_base_info.kernel = get_kernel();
    vm_base_info.arch = get_arch();

    printf("%d %d\n", vm_base_info.issue, vm_issue);
    printf("%s\n", vm_base_info.hostname);
    printf("%s\n", vm_base_info.kernel);
    printf("%s\n", vm_base_info.arch);

    /* TODO: not forget memory free */

}
Пример #4
0
//返回最近的roadid
int get_nearest_road(double x, double y)
{
	int rid = 0;        //真正最近路段id
	int start, end;     //每条路的起始点
	int road, i=1;
	double dis=361.0, temp;

	while(arr_pzroad[i])  //每条路都得查找
	{
		road = arr_pzroad[i]->id;                  //找到roadid
		start = arr_proad[road]->child[0];         //通过roadid找到roadnode起始和终止点
		end = arr_proad[road]->child[1];
		temp = get_dis(start, end, x, y);

		if(temp<dis)     //dis记录最小的
		{
		    dis = temp;
			rid = road;
		}
		i++;
	}
	return rid;
}
Пример #5
0
int main() {
	int n, m;
	while (EOF != scanf("%d%d", &n, &m)) {
		for (int i = 0; i < n; ++i) scanf("%d%d", &pt[i].x, &pt[i].y);
		for (int i = 0; i < n; ++i) scanf("%d", &c[i]);
		int all = (1<<n) - 1;
		int n_st = 0;
		memset(f, -1, sizeof(f));
		for (int i = 0; i <= all; ++i) {
			int t = get_t(i);
			if (t <= m) {
				f[i] = 1;
				st[n_st++] = i;
			}
		}
		for (int s = 1; s <= all; ++s) {
			for (int j = 0; j < n_st; ++j) {
				if ((s & st[j]) == 0 && f[s] != -1) {
					int s2 = s | st[j], t = f[s] + f[st[j]];
					if (f[s2] == -1 || f[s2] > t) f[s2] = t;
				}
			}
		}
		int ans1 = f[all];
		if (ans1 == -1) {
			puts("-1 -1");
			continue;
		}
		memset(ct, -1, sizeof(ct));
		for (int i = 1; i < n; ++i) {
			ct[1<<i|1][i] = get_dis(pt[0], pt[i]);
		}
		for (int s = 1; s <= all; ++s) {
			for (int i = 1; i < n; ++i) {
				if ((s & (1<<i)) && ct[s][i] != -1) {
					for (int j = 1; j < n; ++j) {
						if (s & (1<<j)) continue;
						int s2 = s | (1<<j);
						if (get_t(s2) <= m) {
							int t = ct[s][i] + get_dis(pt[i], pt[j]);
							if (ct[s2][j] == -1 || ct[s2][j] > t) {
								ct[s2][j] = t;
							}
						}
					}
				}
			}
		}
		memset(f, -1, sizeof(f));
		for (int s = 1; s <= all; ++s) {
			for (int i = 1; i < n; ++i) {
				if ((s & (1<<i)) && ct[s][i] != -1) {
					ct[s][i] += get_dis(pt[0], pt[i]);
					if (f[s] == -1 || f[s] > ct[s][i]) f[s] = ct[s][i];
				}
			}
		}
		n_st = 0;
		for (int s = 1; s <= all; ++s) {
			if (f[s] != -1)	st[n_st++] = s;
		}
		for (int s = 1; s <= all; ++s) {
			for (int j = 0; j < n_st; ++j) {
				if (0 == ((s&st[j])^1) && f[s] != -1) {
					int s2 = s | st[j], t = f[s] + f[st[j]];
					if (f[s2] == -1 || f[s2] > t) f[s2] = t;
				}
			}
		}
		printf("%d %d\n", ans1, f[all]);
	}
	return 0;
}