【FOJ】Problem 1095 FatMouse's Tour

Problem 1095 FatMouse’s Tour.

题意

  • coordinates - 坐标
  • 找到拜访每条街上每个生物的时间最短的路径
    街道两边都住着老鼠,但是他一次只能拜访一个方向(双向街道);每个路口任意方向都能选择(包括来的方向),到路的尽头可以折返
    没来过的方向速度20 km/h,来过的方向速度50 km/h
  • 输入
    第一行,鼠王办公室的坐标
    随后100行,给出街道起点和终点的坐标,遇到java结束输入
  • 输出
    鼠王他巡查万所有鼠鼠最少要多久,小时:分钟

思路

巡视花最少时间的情况:每条街道都仅去程一次、返程一次
计算每条街道的长度l,hour = l*2/20000 即为最短时间的小时数
小时位输出(int)hour,分钟min = (hour-(int)hour)*60,四舍五入输出(int)(min+0.5)

笔记

  • scanf("%s", flag)不用管前面的换行,会自动在末尾补\0
  • %02d分钟的输出格式!!

代码

#include<cstdio>
#include<cmath>
#include<string.h>
using namespace std;

int str_to_int(char str[]){
	int x=0;
	for(int i=0; str[i]!='\0'; i++)
		x = x*10 + str[i]-'0';
	return x;
}

int main(){
	int x_office, y_office, x_begin, y_begin, x_end, y_end;
	double l, hour, min;
	char flag[100];
	while(scanf("%d %d", &x_office, &y_office)!=EOF){
		scanf("%s", flag);
		hour = 0;
		while(strcmp(flag, "java")!=0){
			x_begin = str_to_int(flag);
			scanf("%d %d %d", &y_begin, &x_end, &y_end);
			l = sqrt((y_end-y_begin)*(y_end-y_begin) + (x_end-x_begin)*(x_end-x_begin));
			hour += l*2/20000;
			scanf("%s", flag);
		}
		min = (hour - (int)hour)*60;
		printf("%d:%02d\n", (int)hour, (int)(min+0.5));
	}
	return 0;
}
发布了28 篇原创文章 · 获赞 0 · 访问量 323

猜你喜欢

转载自blog.csdn.net/qq_44531167/article/details/105187261