蓝桥杯 历年真题 观光铁路(JAVA实现非正解瞎写骗分)

问题描述

  跳蚤国正在大力发展旅游业,每个城市都被打造成了旅游景点。
  许多跳蚤想去其他城市旅游,但是由于跳得比较慢,它们的愿望难以实现。这时,小C听说有一种叫做火车的交通工具,在铁路上跑得很快,便抓住了商机,创立了一家铁路公司,向跳蚤国王请示在每两个城市之间都修建铁路。
  然而,由于小C不会扳道岔,火车到一个城市以后只能保证不原路返回,而会随机等概率地驶向与这个城市有铁路连接的另外一个城市。
  跳蚤国王向广大居民征求意见,结果跳蚤们不太满意,因为这样修建铁路以后有可能只游览了3个城市(含出发的城市)以后就回来了,它们希望能多游览几个城市。于是跳蚤国王要求小C提供一个方案,使得每只跳蚤坐上火车后能多游览几个城市才回来。


  小C提供了一种方案给跳蚤国王。跳蚤国王想知道这个方案中每个城市的居民旅游的期望时间(设火车经过每段铁路的时间都为1),请你来帮跳蚤国王。

输入格式

  输入的第一行包含两个正整数n、m,其中n表示城市的数量,m表示方案中的铁路条数。
  接下来m行,每行包含两个正整数u、v,表示方案中城市u和城市v之间有一条铁路。
  保证方案中无重边无自环,每两个城市之间都能经过铁路直接或间接到达,且火车由任意一条铁路到任意一个城市以后一定有路可走。

输出格式

  输出n行,第i行包含一个实数tBi,表示方案B中城市i的居民旅游的期望时间。你应当输出足够多的小数位数,以保证输出的值和真实值之间的绝对或相对误差不超过1e-9。

样例输入

4 5
1 2
2 3
3 4
4 1
1 3

样例输出

3.333333333333
5.000000000000
3.333333333333
5.000000000000

样例输入

10 15
1 2
1 9
1 5
2 3
2 7
3 4
3 10
4 5
4 8
5 6
6 7
6 10
7 8
8 9
9 10

样例输出

10.000000000000
10.000000000000
10.000000000000
10.000000000000
10.000000000000
10.000000000000
10.000000000000
10.000000000000
10.000000000000
10.000000000000

数据规模和约定

  对于10%的测试点,n <= 10;
  对于20%的测试点,n <= 12;
  对于50%的测试点,n <= 16;
  对于70%的测试点,n <= 19;
  对于100%的测试点,4 <= k <= n <= 21,1 <= u, v <= n。数据有梯度。

【此问题留坑待填】

首先要求期望我就凑不出数据答案,,,后来在草稿上画了画发现或许答案是题目给出的有向边的条数除以各个城市的出度【显然不是】。不过凑巧的过了样例就分分钟交了,果不其然没过、、、不过竟然得了65分(:]   _      L)这是什么数据呀。。。

import java.util.*;
import java.math.*;
import java.io.*;
import java.lang.Integer;

public class Main {
	static int [][]gra = new int [50][50];
	public static void main(String[] args) throws IOException {
		
		Scanner cin = new Scanner(System.in);

		int n = cin.nextInt();
		int m = cin.nextInt();
		for (int i = 0; i <= n; ++i) {
			for (int j = 0; j <= n; ++j) {
				gra[i][j] = 0;
				if (i == j) {
					gra[i][j] = 1;
				}
			}
		}
		
		int a, b;
		for (int i = 0; i < m; ++i) {
			a = cin.nextInt();
			b = cin.nextInt();
			gra[a][b] = gra[b][a] = 1;
		}
		double sum = 2.000000000000 * Double.valueOf(m); 
		for (int i = 1; i <= n; ++i) {
			double cnt = 0.0;
			for (int j = 1; j <= n; ++j) {
				if (i == j) {
					continue;
				}
				
				if (gra[i][j] == 1) {
					cnt++;
				}
			}
			String ans = String.format("%.12f", sum/cnt);
			System.out.println(ans);
		}
	}
}

 

你可能感兴趣的:(OJ)