zoukankan      html  css  js  c++  java
  • SRM481

    250pt

    题意:上帝知道一个“先有鸡还是先有蛋”的答案,上帝和N<=10^6个人说了答案,不过有x个人故意告诉了他们错误的答案,然后有一个人问了这N个人问题的答案,有M个人说先有鸡,N-M个人说现有蛋,已知其中有y个人故意说了上帝告诉他们的相反的答案。现在给N M x y,问是否能推测出答案,或者多解,或者无解。

    思路:因为N很小,直接枚举那些人说谎,然后判定即可。

    500pt

    题意:有N<=50个任务,每个任务有运行时间和用户,机器同一个时间只能跑一个任务,一个任务运行中不能中断,每个用户可能有多个任务,每个用户的等待时间为他的最后一个任务完成前等待的时间。电脑安排任务始终保证所有用户的平均等待时间最短,在这个条件下, 每个schedule都有同等的可能性。现在给你N个任务的信息,问每个任务期望的结束时间是多少。

    思路:很明显,对于某个人的任务,那么一定是连着运行对于结果最优。

            那么那么如果a与b的任务运行时间相同,那么他们两个是可以交换的。

            同时,对于同一user的任务间,顺序任意。接下去便是统计了。注意任务是等概率的就好做了。

    code:

     1 // BEGIN CUT HERE
     2 /*
     3 
     4 */
     5 // END CUT HERE
     6 #line 7 "BatchSystemRoulette.cpp"
     7 #include <cstdlib>
     8 #include <cctype>
     9 #include <cstring>
    10 #include <cstdio>
    11 #include <cmath>
    12 #include <algorithm>
    13 #include <vector>
    14 #include <string>
    15 #include <iostream>
    16 #include <sstream>
    17 #include <map>
    18 #include <set>
    19 #include <queue>
    20 #include <stack>
    21 #include <fstream>
    22 #include <numeric>
    23 #include <iomanip>
    24 #include <bitset>
    25 #include <list>
    26 #include <stdexcept>
    27 #include <functional>
    28 #include <utility>
    29 #include <ctime>
    30 using namespace std;
    31 
    32 #define PB push_back
    33 #define MP make_pair
    34 
    35 typedef vector<int> VI;
    36 typedef vector<string> VS;
    37 typedef vector<double> VD;
    38 typedef long long LL;
    39 typedef pair<int, int> PII;
    40 struct oo{
    41        int val, id;
    42        string usr;
    43        oo(){}
    44        oo(int _val, int _id, string _usr): val(_val), id(_id), usr(_usr){}
    45        bool operator<(const oo &b)const{
    46              return usr < b.usr || (usr == b.usr && val < b.val);
    47        }
    48 };
    49 int P[120], S[120], last[120];
    50 long long sum[120];
    51 class BatchSystemRoulette
    52 {
    53         public:
    54         vector <double> expectedFinishTimes(vector <int> dur, vector <string> user)
    55         {
    56                 vector<oo> v;
    57                 v.clear();
    58                 for (int i = 0; i < dur.size(); ++i)
    59                    v.push_back(oo(dur[i], i, user[i]));
    60                 sort(v.begin(), v.end());
    61                 int n = v.size();
    62                 memset(sum, 0, sizeof(sum));
    63                 memset(P, 0, sizeof(P));
    64                 int m = 1;
    65                 sum[1] = v[0].val;
    66                 P[0] = 1;
    67                 for (int i = 1; i < n; ++i){
    68                     if (v[i].usr != v[i-1].usr) m++;
    69                     sum[m] += v[i].val;
    70                     P[i] = m;
    71                 }
    72                 last[m] = n - 1;
    73                 memset(S, 0, sizeof(S));
    74                 for (int i = 1; i <= m; ++i)
    75                     for (int j = 1; j <= m; ++j)
    76                         if (sum[i] == sum[j]) S[i]++;
    77                 vector<double> ans(n);
    78                 for (int i = 0; i < n; ++i){
    79                      double ssum = 0;
    80                      for (int j = 1; j <= m; ++j)
    81                          if (sum[P[i]] > sum[j]) ssum += sum[j];
    82                      double tmp = (S[P[i]] - 1.0) / 2.0 * sum[P[i]];
    83                      tmp += 0.5 * (sum[P[i]] - v[i].val) + v[i].val;
    84                      ans[v[i].id] = tmp + ssum;
    85                 }
    86                 return ans;
    87         }
    88 };
    View Code
  • 相关阅读:
    Meten Special Activities II
    Meten Special Activities II
    Meten Special Activities II
    Meten Special Activities II
    Meten Special Activities
    Meten Special Activities
    Meten Special Activities
    Meten Special Activities
    Meten Special Activities
    冒泡排序和选择排序
  • 原文地址:https://www.cnblogs.com/yzcstc/p/3627121.html
Copyright © 2011-2022 走看看