首页 > 其他分享 >20240925 随机训练

20240925 随机训练

时间:2024-09-25 21:12:32浏览次数:13  
标签:训练 int sum nx ny 20240925 随机 dp MOD

Yukicoder 2897

题目描述

给定两个点集 \(S,T\),我们定义 \(d((x_1,y_1),(x_2,y_2))=|x_1-x_2|+|y_1-y_2|\)。

我们定义两个集合 \(S,T\) 的距离 \(D(S,T)=\min \limits_{s\in S,t\in T}\{d(s,t)\}\)。求 \(D(S,T)\)。

思路

我们把每个 \(S\) 中的元素放在一起做一个多源 bfs,然后对每个 \(T\) 中的元素看它的最短路即可。

时空复杂度均为 \(O(V^2)\)。

代码

#include<bits/stdc++.h>
using namespace std;
using pii = pair<int, int>;

const int MAXN = 200001, MAXV = 1000, dx[] = {1, -1, 0, 0}, dy[] = {0, 0, -1, 1};

int n, m, dist[MAXV][MAXV], ans = int(1e9);
bool vis[MAXV][MAXV];

int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  cin >> n;
  queue<pii> que;
  for(int i = 1, x, y; i <= n; ++i) {
    cin >> x >> y;
    vis[x][y] = 1;
    dist[x][y] = 0;
    que.push({x, y});
  }
  for(; !que.empty(); ) {
    auto [x, y] = que.front();
    que.pop();
    for(int d : {0, 1, 2, 3}) {
      int nx = x + dx[d], ny = y + dy[d];
      if(nx >= 0 && nx < 1000 && ny >= 0 && ny < 1000 && !vis[nx][ny]) {
        vis[nx][ny] = 1;
        dist[nx][ny] = dist[x][y] + 1;
        que.push({nx, ny});
      }
    }
  }
  cin >> m;
  for(int i = 1, x, y; i <= m; ++i) {
    cin >> x >> y;
    ans = min(ans, dist[x][y]);
  }
  cout << ans;
  return 0;
}

Yukicoder 2899

题目描述

给定一个 \(01\) 串 \(S\),求有多少个长度为 \(N\) 的排列 \(p\) 满足以下条件:

  • 对于每个 \(1\le i<j\le N且 S_i=0,S_j=1\),都要满足 \(p_i<p_j\)。

思路

我们定义 \(dp_{i,j}\) 表示当前考虑到第 \(i\) 个,下一个 \(1\) 的方案数为 \(j\) 的方案数。

如果 \(S_{i+1}=1\),那么明显 \(dp_{i+1,j-1}\leftarrow j\cdot dp_{i,j}\)。

否则,此时剩余的数有 \(N-i\) 个,其中有 \(N-i-j\) 个数只能用在 \(0\) 上,也就是 \(dp_{i+1,j}\leftarrow (N-i-j)\cdot dp_{i,j}\)。而可以用在 \(1\) 上的 \(j\) 个数,那么如果你当前用了第 \(k\) 大的,那么第 \(k,k+1,\dots,j\) 大的都不能用了(因为他们比当前这个小)。所以我们有转移 \(dp_{i+1,j-k}\leftarrow dp_{i,j}(1\le k\le j)\)。这个可以用差分优化。

时空复杂度均为 \(O(N^2)\)。

代码

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

const int MAXN = 2001, MOD = 998244353;

int n, dp[MAXN][MAXN], sum[MAXN][MAXN];
string s;

int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  cin >> n >> s;
  s = ' ' + s;
  dp[0][n] = 1;
  for(int i = 0; i <= n; ++i) {
    for(int j = n - i; j >= 0; --j) {
      sum[i][j] = (sum[i][j] + sum[i][j + 1]) % MOD;
      dp[i][j] = (dp[i][j] + sum[i][j]) % MOD;
      if(i == n) {
        continue;
      }
      if(s[i + 1] == '1' && j) {
        dp[i + 1][j - 1] = (dp[i + 1][j - 1] + 1ll * j * dp[i][j] % MOD) % MOD;
      }else if(s[i + 1] == '0') {
        dp[i + 1][j] = (dp[i + 1][j] + 1ll * dp[i][j] * (n - i - j) % MOD) % MOD;
        if(j) {
          sum[i + 1][j - 1] = (sum[i + 1][j - 1] + dp[i][j]) % MOD;
        }
      }
    }
  }
  cout << dp[n][0];
  return 0;
}

Yukicoder 2901

题目描述

你有一个长度为 \(N\) 的序列 \(A\),有 \(Q\) 次操作:

  • 令 \(A_p\leftarrow x\)。
  • 判断 \([l,r]\) 是否存在字串使得其按位或为 \(2^K-1\),如果有,输出最短长度。

思路

使用线段树维护。

线段树中我们记录这些信息:当前区间答案,前/后缀的使前/后缀按位或发生变化的位置和此时的按位或和。具体来说,就是:

  • 令 \(sum_i=A_1\operatorname{OR}A_2\operatorname{OR}\dots A_i\)。我们会记录 \(sum_{i-1}\ne sum_i\) 的 \((sum_i,i)\)。

我们在合并信息时,当前 \(区间答案=\min\{左区间答案,右区间答案,中间的答案\}\)。这里中间的答案就是左区间的后缀+右区间的前缀。

因为我们记录的前/后缀

标签:训练,int,sum,nx,ny,20240925,随机,dp,MOD
From: https://www.cnblogs.com/yaosicheng124/p/18432228

相关文章

  • 20240913 随机训练
    GYM105293C题目描述有\(N\)个怪物排成一排,第\(i\)个怪物的血量为\(h_i\)。当一个怪物的血量\(h_i\le0\)时,则它死亡。你可以进行以下操作:选择一个正整数\(x\)。找到第一个\(h_i\gex\)的\(i\),并令\(h_i\leftarrowh_i-x\)。如果该次操作没有影响到任何怪物,......
  • Faster-RCNN 目标检测模型的训练与测试指南
    文章目录......
  • 20240925 模拟赛总结
    期望得分:100+85+30+0=215实际得分:100+65+30+0=195。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。还是没啥长进哈。T1二进制位数是关键一招,位数相同怎么异或都会小,位数不同怎么异或都......
  • 大模型训练:K8s 环境中数千节点存储最佳实践
    今天这篇博客来自全栈工程师朱唯唯,她在前不久举办的KubeCon中国大会上进行了该主题分享。Kubernetes已经成为事实的应用编排标准,越来越多的应用在不断的向云原生靠拢。与此同时,人工智能技术的迅速发展,尤其是大型语言模型(LLM)的推进,导致企业需要处理的数据量急剧增加,例如,Llama......
  • SelMatch:最新数据集蒸馏,仅用5%训练数据也是可以的 | ICML'24v1
    数据集蒸馏旨在从大型数据集中合成每类(IPC)少量图像,以在最小性能损失的情况下近似完整数据集训练。尽管在非常小的IPC范围内有效,但随着IPC增加,许多蒸馏方法变得不太有效甚至性能不如随机样本选择。论文对各种IPC范围下的最先进的基于轨迹匹配的蒸馏方法进行了研究,发现这些方法在增......
  • SelMatch:最新数据集蒸馏,仅用5%训练数据也是可以的 | ICML'24
    数据集蒸馏旨在从大型数据集中合成每类(IPC)少量图像,以在最小性能损失的情况下近似完整数据集训练。尽管在非常小的IPC范围内有效,但随着IPC增加,许多蒸馏方法变得不太有效甚至性能不如随机样本选择。论文对各种IPC范围下的最先进的基于轨迹匹配的蒸馏方法进行了研究,发现这些方法在增......
  • [SKSEC::CTF新生web专题训练赛] week1 writeup
    1.扫雷游戏(js)随便点格子,当点到第二个时,会判定踩雷失败,浏览器给出gameover的提示并刷新网页。F12从来源中找到saolei.js,找到gameover所在的函数if分支。if(block.isMine){block.innerHTML='......
  • 2024.9.[23, 24]训练记录
    23上午whk。辅助角公式。诱导公式。23下午莫队:原序列分块。询问排序:第一关键字为左端点所在块的编号,第二关键字为右端点编号。回滚莫队:适用于增加或删除操作其中一个复杂度较大,但另一个较小的情况。可以做到只使用一种操作。排序后按照左端点的块编号一块一块做。排完......
  • 浅谈如何处理大语言模型训练数据之三开源数据集介绍
    随着最近这些年来基于统计机器学习的自然语言处理的算法的发展,以及信息检索研究的需求,特别是近年来深度学习和预训练语言模型的研究以及国内国外许多大模型的开源,研究人员们构建了多种大规模开源数据集,涵盖了网页、图片、论文、百科等多个领域。在构建大语言模型时,数据的质量和多......
  • 利用未标记数据的半监督学习在模型训练中的效果评估
    数据科学家在实践中经常面临的一个关键挑战是缺乏足够的标记数据来训练可靠且准确的模型。标记数据对于监督学习任务(如分类或回归)至关重要。但是在许多领域,获取标记数据往往成本高昂、耗时或不切实际。相比之下,未标记数据通常较易获取,但无法直接用于模型训练。如何利用未标记数据来......