网易笔试第三题二分过不了吗?

RT #笔试题目##网易#
全部评论
代码写得比较丑。。求轻喷 #include <bits/stdc++.h> using namespace std; int cap[210]; int rd[210]; vector<int> toporder; vector<int> G[210]; double tim[210]; double power[210]; bool vis[210]; void dfs(int cur) {     vis[cur] = true;     tim[cur] = 0.0;     for (auto to : G[cur])         if (!vis[to])             dfs(to); } void topsort(int n) {     toporder.clear();     queue<int> q;     for (int i = 1; i <= n; i++)         if (rd[i] == 0)             q.push(i);     while (!q.empty())     {         int cur = q.front();q.pop();         toporder.push_back(cur);         for (auto to : G[cur])         {             rd[to]--;             if (rd[to] == 0)                 q.push(to);         }     } } int main() {     int t;     scanf("%d", &t);     while (t--)     {         int n, m, b, e;         scanf("%d%d%d%d", &n, &m, &b, &e);         for (int i = 1; i <= n; i++)             scanf("%d", cap + i), rd[i] = 0, vis[i] = false, G[i].clear(), tim[i] = -1.0;         int from, to;         for (int i = 0; i < m; i++)         {             scanf("%d%d", &from, &to);             G[from].push_back(to);             rd[to]++;         }         if (e > 0)         {             dfs(b);             topsort(n);             for (int i = 1; i <= n; i++)             {                 if (tim[i] == -1.0)                     continue;                 double l = 0.0, r = 65536.0*65536.0*200.0;                 for (int j = 0; j < 50; j++)                 {                     double mid = (l + r) / 2;                     for (int l = 1; l <= n; l++)                         power[l] = 0;                     power[b] = e * mid;                     int k = 0;                     while (toporder[k] != i)                     {                         int cur = toporder[k];                         if (power[cur] >= cap[cur])                             for (auto to : G[cur])                                 power[to] += (power[cur] - cap[cur]) / G[cur].size();                         k++;                     }                     if (power[i] >= cap[i])                         r = mid;                     else                         l = mid;                 }                 tim[i] = (l + r) / 2.0;             }         }         printf("%.4f", tim[1]);         for (int i = 2; i <= n; i++)             printf(" %.4f", tim[i]);         puts("");     }     return 0; }
点赞 回复 分享
发布于 2019-04-06 22:41
没做出来1道,我0分
点赞 回复 分享
发布于 2019-04-06 21:34
都没看到第三题,只能用c/c++/java, 不能python, 拼死AC 2道
点赞 回复 分享
发布于 2019-04-06 21:35
第三题求解答
点赞 回复 分享
发布于 2019-04-06 21:40
二分完之后你想怎么写,我是直接dfs+记忆化搜索,但有bug WA了
点赞 回复 分享
发布于 2019-04-06 21:49

相关推荐

头像
02-15 16:23
中南大学 Java
野猪不是猪🐗:签了美团真是不一样! 亲戚们都知道我签了美团,过年都围着我问送一单多少钱,还让弟弟妹妹们引以为戒,笑我爸我妈养了个🐢孩子,说从小就知道我这个人以后肯定没出息,我被骂的都快上天了
点赞 评论 收藏
分享
评论
点赞
3
分享

创作者周榜

更多
牛客网
牛客企业服务