首页 > 其他分享 >湘潭夏令营

湘潭夏令营

时间:2024-09-25 11:01:09浏览次数:8  
标签:frac mat 湘潭 int ret 夏令营 dp MOD

GYM 105322 A

题目描述

有 \(N\) 个人(\(N\) 为偶数),每次将随机分成 \(\frac{N}{2}\) 个 \(2\) 人组。组内两个人将进行比赛,每个人都有 \(\frac{1}{2}\) 的概率赢。赢得人排在前面。求一开始在排名 \(x\),进行 \(k\) 轮比赛后的期望位置。

思路

很容易想到到达除了 \(x\) 以外的排名的概率都是一样的,所以我们定义 \(dp_{i,1/0}\) 表示进行 \(i\) 轮比赛,是/否在位置 \(x\) 的概率。

这两个状态都能互相转移,转移如下:

\[\begin{array}{l} dp_{i,0}=dp_{i-1,0} \cdot (\frac{1}{2} + \frac{n - 2}{2(n - 1)}) + dp_{i-1,1}\cdot\frac{1}{2(n - 1)}\\ dp_{i,1} = dp_{i,0} \cdot \frac{1}{2} + dp_{i,1} \cdot \frac{1}{2} \end{array} \]

可以优化成矩阵形式:

\[\begin{bmatrix}dp_{i,0}\\dp_{i,1}\end{bmatrix}=\begin{bmatrix}dp_{i-1,0}\\dp_{i-1,1}\end{bmatrix}\begin{bmatrix}\frac{1}{2} + \frac{n - 2}{2(n - 1)} & \frac{1}{2(n - 1)}\\\frac{1}{2}&\frac{1}{2}\end{bmatrix} \]

空间复杂度 \(O(1)\),时间复杂度 \(O(\log k)\)。

代码

#include<bits/stdc++.h>
using namespace std;
using ll = long long;

const int MOD = 998244353, inv2 = 499122177;

struct Matrix {
  int n, m, mat[3][3];
  void Clear(int a, int b) {
    n = a, m = b;
    for(int i = 1; i <= n; ++i) {
      for(int j = 1; j <= m; ++j) {
        mat[i][j] = 0;
      }
    }
  }
  Matrix operator*(const Matrix &x) {
    Matrix ret;
    ret.Clear(x.n, m);
    for(int i = 1; i <= x.n; ++i) {
      for(int j = 1; j <= m; ++j) {
        for(int k = 1; k <= n; ++k) {
          ret.mat[i][j] = (ret.mat[i][j] + 1ll * mat[k][j] * x.mat[i][k] % MOD) % MOD;
        }
      }
    }
    return ret;
  }
  Matrix operator*=(const Matrix &x) {
    return *this = *this * x;
  }
}mat, x;

ll n, k, X;

int Pow(int a, ll b) {
  int ret = 1;
  for(; b; a = 1ll * a * a % MOD, b >>= 1) {
    if(b & 1) {
      ret = 1ll * ret * a % MOD;
    }
  }
  return ret;
}

Matrix Pow(Matrix ret, Matrix a, ll b) {
  for(; b; a *= a, b >>= 1) {
    if(b & 1) {
      ret *= a;
    }
  }
  return ret;
}

int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  cin >> n >> X >> k;
  mat.Clear(2, 2);
  mat.mat[1][1] = (inv2 + 1ll * (n - 2) % MOD * Pow(2ll * ((n - 1) % MOD) % MOD, MOD - 2) % MOD) % MOD;
  mat.mat[1][2] = 1ll * inv2 * Pow((n - 1) % MOD, MOD - 2) % MOD;
  mat.mat[2][1] = mat.mat[2][2] = inv2;
  x.Clear(2, 1);
  x.mat[2][1] = 1;
  Matrix ans = Pow(x, mat, k);
  cout << (1ll * (1ll * (1 + n % MOD) % MOD * (n % MOD) % MOD * inv2 % MOD - (X % MOD) + MOD) % MOD * ans.mat[1][1] % MOD + 1ll * X % MOD * ans.mat[2][1] % MOD) % MOD;
  return 0;
}

GYM 105322 B

题目描述

有一个 \(N\) 个数的序列 \(A\),两个人将轮流进行以下操作之一:

  • 删除序列中其中一个最小值。
  • 在所有数 \(>0\) 的情况下,你可以令所有元素减一。

求最终哪一方会赢。

思路

假设现在只有两个数,那么只要有一方删掉了较小值,那么另一方就赢了,所以两方一定会不断减一知道实在不能减为止。

现在我们将 \(A\) 排序。

在到达只有两个数的局面之前,一定会先删掉 \(N-2\) 个元素,而这里减法是将整个数组减一,所以我们不关心其顺序,总共会减 \(A_{N-1}\) 次。

只需判断次数的奇偶性即可。

空间复杂度 \(O(N)\),时间复杂度 \(O(N\log N)\)。

代码

#include<bits/stdc++.h>
using namespace std;
using ll = long long;

const int MAXN = 1000001;

int n;
ll a[MAXN];

int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  cin >> n;
  for(int i = 1; i <= n; ++i) {
    cin >> a[i];
  }
  sort(a + 1, a + n + 1);
  if((a[n - 1] + n - 1) % 2 == 0) {
    cout << "Eric";
  }else {
    cout << "Cire";
  }
  return 0;
}

标签:frac,mat,湘潭,int,ret,夏令营,dp,MOD
From: https://www.cnblogs.com/yaosicheng124/p/18430905

相关文章

  • 福建省历届夏令营-排序
    https://www.luogu.com.cn/problem/P1347特殊情况很烦。如果出现条件\(A<A\),矛盾;然后我们每次加入一条新的边,就重新做拓扑排序,记为函数topo()。如果topo()\(=i\),表示总进队次数为\(i\)。由于要唯一确定,所以如果出现某一个时刻队列长度超过\(1\),就说明这两个点是平级的关......
  • 20240919 湘潭夏令营
    Coin假设\(1\leqslantn\leqslant100\),可以想到去做一个矩阵乘法,记录一下每个位置到其他位置的概率。尝试算一下概率,可以发现每个位置到除了它以外的每一个位置的概率都是\(\frac{1}{2\times(n-1)}\),停留在原地的概率为\(\frac{1}{2}\)。但是可以发现,除了最初他在的......
  • Datawhale X李宏毅苹果书AI夏令营 第五期 深度学习入门 task3
      本次任务主要是了解模型在训练集或测试集上损失较大时的几大原因,了解改进的方向一、模型偏差   模型过于简单,未知参数函数的所有可能性的集合太小,让损失变低的函数不在模型可以描述的范围内;或者是模型的灵活性不够。这个时候重新设计一个模型,给模型更大的灵活性,将......
  • Datawhale X 李宏毅苹果书 AI夏令营(进阶Task03)
    批量归一化为什么不同的参数在更新时其梯度变化如此之大?首先,对于模型中w1,w2两个参数,可以看到其w1参数的梯度变化较为平滑,w2梯度变化较为陡峭,原因是x1较小时,当w1变化较大,由于x1较小,其整体乘积较小,对损失值影响不大;x2较大时,w2发生变化,其乘积较大,其对损失值变化很大,影响较大。......
  • Datawhale X 李宏毅苹果书AI夏令营 Task3打卡
    3.7批量归一化批量归一化的核心思想在于把误差函数图像的“山铲平”,在某些误差表面上不同参数方向的变化率可能差别很大,此时在损失函数上找到临界点会比较困难比如对一个简单的线性函数\(y=\sigma(w_1\timesx_1+w_2\timesx_2+b)\)来说,我们考虑对于参数\(w_1,w_2\)来说,......
  • 第二天学习笔记:Datawhale X 李宏毅苹果书 AI夏令营
    今天学的有些小兴奋,终于解锁了很多熟悉但不明就里的术语。天呢,原来ReLU是“修正线性单元”的意思!RectifiedLinearUnit!但是呢,也有不大对付的地方:好几个地方前言不搭后语。容我一一道来。今天就顺序边读边记:线性模型(linearmodel)==把模型输入的特征x乘上一个权重,再加......
  • 2、实践方法论(Datawhale X 李宏毅苹果书 AI 夏令营)
    2、实践方法论(DatawhaleX李宏毅苹果书AI夏令营)在应用机器学习算法时,实践方法论能够帮助我们更好地训练模型。如果在Kaggle上的结果不太好,虽然Kaggle上呈现的是测试数据的结果,但要先检查训练数据的损失。2.1模型偏差有时候把模型设置的太过简单,使得函数的集合太小了,没......
  • Datawhale X 李宏毅苹果书 AI夏令营-深度学习入门班-task3-机器学习实践方法论
    引入在简单了解到机器学习的过程,以及模型函数的优化升级之后,我们需要根据一些方法论,解决模型实践过程中会遇到的问题,学会分析模型数据,按照正确的路径优化模型,减少测试误差(TestingLoss)。实践方法论整体框架下图是实践方法论的整体框架,下文会根据逻辑顺序一一介绍。step......
  • Datawhale X 李宏毅苹果书 AI夏令营 Task3-机器学习实践方法论
    在上一章介绍完机器学习模型后,我们接着讨论模型中可能存在的一些问题。首先我们需要明确一件事,就是Kaggle上的测试结果不好,可能有多个原因。第一,如果模型在运行训练模型时,所产生的损失就很大,那么有可能是模型偏差(modelbias)或优化(optimization)问题。第二,如果模型在运行训......
  • Datawhale X 李宏毅苹果书 AI夏令营-深度学习入门篇-Task3《深度学习详解》- 实践方法
     核心学习目标:通过《深度学习详解》和李宏毅老师21年的机器学习课程视频,入门机器学习,并尝试学习深度学习,展开代码实践(选修)。该书保留了李宏毅老师公开课中大量生动有趣的例子,帮助读者从生活化的角度理解深度学习的概念、建模过程和核心算法细节,包括卷积神经网络、Transform......