zoukankan      html  css  js  c++  java
  • 2019 Multi-University Training Contest 7 Kejin Player Final Exam

    Kejin Player 期望DP 

    题意:

    初始等级为1,每一级有四个参数 r , s , x , a 。 

    每一级有一个概率p=r/s花费a的代价升级到下一级,失败可能会倒退到x级

    设从 l 到 r 的期望为 g(l, r), 这种期望满足减法 g(l, r) = g(1, r) − g(1, l).

    因为升级只能一级一 级升, 所以要从 1 升级到 r, 必然要经过 l.

    求一个前缀和

    sum[i+1]=sum[i]+ai * si / ri + (sum[i]-sum[x])*(si-ri)/ri;

    ai * si / ri + (sum[i]-sum[x])*(si-ri)/ri  这个类似于二项分布

    一个是升到下一级的花费,一个是失败后回到 i 这一级的花费

     1 #include <set>
     2 #include <map>
     3 #include <stack>
     4 #include <queue>
     5 #include <cmath>
     6 #include <cstdio>
     7 #include <string>
     8 #include <vector>
     9 #include <time.h>
    10 #include <cstring>
    11 #include <iostream>
    12 #include <algorithm>
    13 #include <unordered_map>
    14 
    15 
    16 #define  pi acos(-1.0)
    17 #define  eps 1e-9
    18 #define  fi first
    19 #define  se second
    20 #define  rtl   rt<<1
    21 #define  rtr   rt<<1|1
    22 #define  bug               printf("******
    ")
    23 #define  mem(a, b)         memset(a,b,sizeof(a))
    24 #define  name2str(x)       #x
    25 #define  fuck(x)           cout<<#x" = "<<x<<endl
    26 #define  sf(n)             scanf("%d", &n)
    27 #define  sff(a, b)         scanf("%d %d", &a, &b)
    28 #define  sfff(a, b, c)     scanf("%d %d %d", &a, &b, &c)
    29 #define  sffff(a, b, c, d) scanf("%d %d %d %d", &a, &b, &c, &d)
    30 #define  pf                printf
    31 #define  FIN               freopen("../date.txt","r",stdin)
    32 #define  gcd(a, b)         __gcd(a,b)
    33 #define  lowbit(x)         x&-x
    34 #define  IO                iOS::sync_with_stdio(false)
    35 
    36 
    37 using namespace std;
    38 typedef long long LL;
    39 typedef unsigned long long ULL;
    40 const int maxn = 1e6 + 7;
    41 const int maxm = 8e6 + 10;
    42 const int INF = 0x3f3f3f3f;
    43 const int mod = 1e9 + 7;
    44 
    45 LL expmod(LL a, LL b) {
    46     LL res = 1;
    47     while (b) {
    48         if (b & 1) res = res * a % mod;
    49         a = a * a % mod;
    50         b = b >> 1;
    51     }
    52     return res;
    53 }
    54 
    55 
    56 int t, n, q;
    57 struct node {
    58     LL r, s, x, a;
    59 } qu[maxn];
    60 LL sum[maxn];
    61 
    62 int main() {
    63     //FIN;
    64     sf(t);
    65     while (t--) {
    66         sff(n, q);
    67         for (int i = 1; i <= n; i++) scanf("%lld%lld%lld%lld", &qu[i].r, &qu[i].s, &qu[i].x, &qu[i].a);
    68         sum[1] = 0;
    69         for (int i = 1; i <= n; i++) {
    70             sum[i + 1] = sum[i] + qu[i].s * expmod(qu[i].r, mod - 2) % mod * qu[i].a % mod +
    71                          (qu[i].s - qu[i].r + mod) % mod * expmod(qu[i].r, mod - 2) % mod *
    72                          (sum[i] - sum[qu[i].x] + mod) % mod;
    73            // printf("sum[%d] = %d
    ", i + 1, sum[i + 1]);
    74             sum[i+1]%=mod;
    75         }
    76         while (q--) {
    77             int L, R;
    78             sff(L, R);
    79             printf("%lld
    ", (sum[R] - sum[L]+mod)%mod);
    80         }
    81     }
    82     return 0;
    83 }
    View Code

    Final Exam 思维题

    题意:

    有n个题目,每个题目的分数总和为m,你不知道哪个题目的分数是多少。

    一个题目的分数是X,则你最少需要X+1的时间才能做出这一个问题。

    每一题的分数范围都是【0,m】

    问你保证回答出k个问题的最小代价是多少。

    因为每一题的分数未知,你无法知道前K个问题的最小代价和。

    考虑极端情况,假设你要问答K个问题,有K-1的都是0分,剩下的问题总分是m分,

    如何保证一定可以回答出K个问题呢

    那就是对于剩下的n-k+1个问题都复习m/(n-k+1)+1小时,

    其实就是你保证你剩下的n-k+1的问题复习m小时以上(这样你这个n-k+1个问题里面你至少可以做出来一个)

    这个可以保证这n个问题无论你选哪一个都有K个你做的出。

    完全不会分析,流下了菜鸡的眼泪。

     1 #include <bits/stdc++.h>
     2 #include <cstdio>
     3 #include <cstring>
     4 #include <queue>
     5 #include <cmath>
     6 #include <algorithm>
     7 #include <set>
     8 #include <iostream>
     9 #include <map>
    10 #include <stack>
    11 #include <string>
    12 #include <time.h>
    13 #include <vector>
    14 
    15 #define  pi acos(-1.0)
    16 #define  eps 1e-9
    17 #define  fi first
    18 #define  se second
    19 #define  rtl   rt<<1
    20 #define  rtr   rt<<1|1
    21 #define  bug         printf("******
    ")
    22 #define  mem(a, b)    memset(a,b,sizeof(a))
    23 #define  name2str(x) #x
    24 #define  fuck(x)     cout<<#x" = "<<x<<endl
    25 #define  sf(n)       scanf("%d", &n)
    26 #define  sff(a, b)    scanf("%d %d", &a, &b)
    27 #define  sfff(a, b, c) scanf("%d %d %d", &a, &b, &c)
    28 #define  sffff(a, b, c, d) scanf("%d %d %d %d", &a, &b, &c, &d)
    29 #define  pf          printf
    30 #define  FRE(i, a, b)  for(i = a; i <= b; i++)
    31 #define  FREE(i, a, b) for(i = a; i >= b; i--)
    32 #define  FRL(i, a, b)  for(i = a; i < b; i++)+
    33 #define  FRLL(i, a, b) for(i = a; i > b; i--)
    34 #define  FIN               freopen("../date.txt","r",stdin)
    35 #define  gcd(a, b)    __gcd(a,b)
    36 #define  lowbit(x)   x&-x
    37 #define rep(i, a, b) for(int i=a;i<b;++i)
    38 #define per(i, a, b) for(int i=a-1;i>=b;--i)
    39 
    40 using namespace std;
    41 typedef long long LL;
    42 typedef unsigned long long ULL;
    43 const int maxn = 3e3 + 7;
    44 const int maxm = 8e6 + 10;
    45 const int INF = 0x3f3f3f3f;
    46 const int mod = 10007;
    47 
    48 
    49 int t;
    50 LL n, m, k;
    51 
    52 int main() {
    53     sf(t);
    54     while (t--) {
    55         scanf("%lld%lld%lld", &n, &m, &k);
    56         printf("%lld
    ", m + k + (k - 1) * (m / (n - k + 1)));
    57     }
    58     return 0;
    59 }
    View Code
  • 相关阅读:
    Java day 15
    Java day 14
    Java day 13
    Java day 12
    Java day 11
    Java day 10
    Java day 9
    Java day 8
    Java day 7
    Java day 6
  • 原文地址:https://www.cnblogs.com/qldabiaoge/p/11343283.html
Copyright © 2011-2022 走看看