CF#335 Intergalaxy Trips
2015-12-21 10:22
323 查看
Intergalaxy Trips
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
The scientists have recently discovered wormholes — objects in space that allow to travel very long distances between galaxies and star systems.
The scientists know that there are n galaxies within reach. You are in the galaxy number 1 and you need to get to the galaxy number n. To get from galaxy i to galaxy j, you need to fly onto a wormhole (i, j) and in exactly one galaxy day you will find yourself in galaxy j.
Unfortunately, the required wormhole is not always available. Every galaxy day they disappear and appear at random. However, the state of wormholes does not change within one galaxy day. A wormhole from galaxy i to galaxy j exists during each galaxy day taken separately with probability pij. You can always find out what wormholes exist at the given moment. At each moment you can either travel to another galaxy through one of wormholes that exist at this moment or you can simply wait for one galaxy day to see which wormholes will lead from your current position at the next day.
Your task is to find the expected value of time needed to travel from galaxy 1 to galaxy n, if you act in the optimal way. It is guaranteed that this expected value exists.
Input
The first line of the input contains a single integer n (1 ≤ n ≤ 1000) — the number of galaxies within reach.
Then follows a matrix of n rows and n columns. Each element pij represents the probability that there is a wormhole from galaxy i to galaxy j. All the probabilities are given in percents and are integers. It is guaranteed that all the elements on the main diagonal are equal to 100.
Output
Print a single real value — the expected value of the time needed to travel from galaxy 1 to galaxy n if one acts in an optimal way. Your answer will be considered correct if its absolute or relative error does not exceed 10 - 6.
Namely: let's assume that your answer is a, and the answer of the jury is b. The checker program will consider your answer correct, if
View Code
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
The scientists have recently discovered wormholes — objects in space that allow to travel very long distances between galaxies and star systems.
The scientists know that there are n galaxies within reach. You are in the galaxy number 1 and you need to get to the galaxy number n. To get from galaxy i to galaxy j, you need to fly onto a wormhole (i, j) and in exactly one galaxy day you will find yourself in galaxy j.
Unfortunately, the required wormhole is not always available. Every galaxy day they disappear and appear at random. However, the state of wormholes does not change within one galaxy day. A wormhole from galaxy i to galaxy j exists during each galaxy day taken separately with probability pij. You can always find out what wormholes exist at the given moment. At each moment you can either travel to another galaxy through one of wormholes that exist at this moment or you can simply wait for one galaxy day to see which wormholes will lead from your current position at the next day.
Your task is to find the expected value of time needed to travel from galaxy 1 to galaxy n, if you act in the optimal way. It is guaranteed that this expected value exists.
Input
The first line of the input contains a single integer n (1 ≤ n ≤ 1000) — the number of galaxies within reach.
Then follows a matrix of n rows and n columns. Each element pij represents the probability that there is a wormhole from galaxy i to galaxy j. All the probabilities are given in percents and are integers. It is guaranteed that all the elements on the main diagonal are equal to 100.
Output
Print a single real value — the expected value of the time needed to travel from galaxy 1 to galaxy n if one acts in an optimal way. Your answer will be considered correct if its absolute or relative error does not exceed 10 - 6.
Namely: let's assume that your answer is a, and the answer of the jury is b. The checker program will consider your answer correct, if
/** Create By yzx - stupidboy */ #include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <deque> #include <vector> #include <queue> #include <iostream> #include <algorithm> #include <map> #include <set> #include <ctime> #include <iomanip> using namespace std; typedef long long LL; typedef double DB; #define MIT (2147483647) #define INF (1000000001) #define MLL (1000000000000000001LL) #define sz(x) ((int) (x).size()) #define clr(x, y) memset(x, y, sizeof(x)) #define puf push_front #define pub push_back #define pof pop_front #define pob pop_back #define mk make_pair inline int Getint() { int Ret = 0; char Ch = ' '; bool Flag = 0; while(!(Ch >= '0' && Ch <= '9')) { if(Ch == '-') Flag ^= 1; Ch = getchar(); } while(Ch >= '0' && Ch <= '9') { Ret = Ret * 10 + Ch - '0'; Ch = getchar(); } return Flag ? -Ret : Ret; } const DB EPS = 1e-7; const int N = 1010; int n, data ; DB dp , stay , cnt ; bool visit ; inline void Input() { scanf("%d", &n); for(int i = 1; i <= n; i++) for(int j = 1; j <= n; j++) scanf("%d", &data[i][j]); } inline void Solve() { for(int i = 1; i <= n; i++) dp[i] = INF, stay[i] = 1.0, cnt[i] = 0.0; dp = 0; for(int k = 1; k <= n; k++) { int idx = -1; DB mn = INF; for(int i = 1; i <= n; i++) if(!visit[i] && mn >= dp[i]) mn = dp[i], idx = i; if(idx == 1) { printf("%.12lf\n", dp[1]); break; } visit[idx] = 1; for(int i = 1; i <= n; i++) if(!visit[i]) { cnt[i] += stay[i] * dp[idx] * (0.01 * data[i][idx]); stay[i] *= 1 - 0.01 * data[i][idx]; if(fabs(1 - stay[i]) > EPS) dp[i] = (1 + cnt[i]) / (1 - stay[i]); } } } int main() { freopen("a.in", "r", stdin); Input(); Solve(); return 0; }
View Code
相关文章推荐
- ajax局部更新
- Toast的用法
- TextView特效
- android 开发中遇到错误及解决办法总结(在别处看到的)
- win 10 提升权限
- 学习笔记(8)——正则表达式
- EMI/RFI (开关电源外壳带高压?)
- iOS 时间状态栏的隐藏和显示 重载两个函数即可
- 语言c++(index)
- qt超强精美绘图控件 - QCustomPlot一览 及 安装使用教程
- ASP.NET MVC 身份认证
- 我们为什么这么拼?(转载自微信)
- 数据结构 个人总结——名词
- dblp 数据集之python lxml解析
- python下载网页源码 写入文本
- C++命名空间
- 手机移动端WEB资源整合
- 게...마련이다=기...마련이다. 表示必然会出现某事
- 产品策划二:App启动页的相关
- How to set custom colors in amCharts Column Chart