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

20240913 随机训练

时间:2024-09-25 20:02:19浏览次数:1  
标签:dots 训练 int 20240913 sum 随机 using ll 怪物

GYM 105293 C

题目描述

有 \(N\) 个怪物排成一排,第 \(i\) 个怪物的血量为 \(h_i\)。当一个怪物的血量 \(h_i\le 0\) 时,则它死亡。

你可以进行以下操作:

  • 选择一个正整数 \(x\)。
  • 找到第一个 \(h_i\ge x\) 的 \(i\),并令 \(h_i\leftarrow h_i -x\)。
  • 如果该次操作没有影响到任何怪物,或有怪物死亡,则游戏结束。

求在在游戏结束前能做的最多操作。

思路

我们考虑尽量让前面的怪物血量降至 \(1\),接着去令后面的怪物血量降至 \(1\)。

在打后面的怪物时,为了不打中前面的,所以必须保证 \(x>h_i\)。

假设现在最少能打 \(x\),那么很明显最多能打 \(\lceil\frac{h_i}{x}\rceil-1\) 次。

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

代码

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

const int MAXN = 300001;

int t, n, a[MAXN], Max = 1;
ll ans;

void Solve() {
  cin >> n;
  ans = 0, Max = 1;
  for(int i = 1; i <= n; ++i) {
    cin >> a[i];
  }
  for(int i = 1; i <= n; ++i) {
    if(Max < a[i]) {
      ans += (a[i] + Max - 1) / Max - 1, a[i] = 1;
    }
    Max = max(Max, a[i] + 1);
  }
  cout << ans + 1 << "\n";
}

int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  for(cin >> t; t--; Solve()) {
  }
  return 0;
}

GYM 105293 D

题目描述

给定一个集合 \(S=\{1,2,\dots,N\}\),你可以对其进行以下操作恰好 \(N-1\) 次:

  • 选择两个 \(S\) 中的数 \(x,y\),从 \(S\) 中删除他们,并插入 \(x-y\)。

求是否能有一种方法使得最终 \(S=\{m\}\)。如果有,则构造一种方案。

思路

我们先证明,假设我们已经把 \(S\) 分成了两个集合 \(A,B\),且 \(\sum \limits_{x\in A} x - \sum \limits_{x\in B}x=m\),且 \(A,B\ne \varnothing\),那么一定存在一种方案符合要求。具体如下:

  • 首先我们令 \(B_1\) 减去 \(A_2,\dots,A_{|A|}\)。
  • 接着我们令 \(A_1\) 减去 \(B_1,B_2,\dots,B_{|B|}\)。

这样最终的值为 \(A_1-(B_1-A_2-\dots-A_{|A|})-B_2-\dots-B_{|B|}=\sum \limits_{x\in A} x - \sum \limits_{x\in B}x=m\),符合要求。

又因为我们能凑出 \(1+2+\dots+N-\sum 2x\),所以 \(m\) 的奇偶性必须与 \(1+2+\dots+N\) 相同,并且 \(m\ne 1+2+\dots+N或-1-2-\dots-N\)。

如果满足上述条件,那么我们贪心地求 \(A,B\)。先令 \(S=1+2+\dots+N\),接着倒着枚举 \(1\) 到 \(N\)。只要 \(S-x\ge m\) 就令 \(x\in B\)。否则令 \(x\in A\)。

最后使用上述方法构造即可。

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

代码

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

int t, n;
ll m, sum;
vector<ll> a, b;

void Solve() {
  cin >> n >> m;
  if(1ll * (1 + n) * n / 2 % 2 != (m % 2 + 2) % 2 || m == 1ll * (1 + n) * n / 2 || m == -1ll * (1 + n) * n / 2) {
    cout << "NO\n";
    return;
  }
  cout << "YES\n";
  sum = -1ll * (1 + n) * n / 2, a.clear(), b.clear();
  for(int i = n; i >= 1; --i) {
    if(sum + 2ll * i <= m) {
      sum += 2 * i, a.emplace_back(i);
    }else {
      b.emplace_back(i);
    }
  }
  for(int i = 1; i < int(a.size()); ++i) {
    cout << b[0] << " " << a[i] << "\n";
    b[0] -= a[i];
  }
  for(int i = 0; i < int(b.size()); ++i) {
    cout << a[0] << " " << b[i] << "\n";
    a[0] -= b[i];
  }
}

int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  for(cin >> t; t--; Solve()) {
  }
  return 0;
}

标签:dots,训练,int,20240913,sum,随机,using,ll,怪物
From: https://www.cnblogs.com/yaosicheng124/p/18432086

相关文章

  • Faster-RCNN 目标检测模型的训练与测试指南
    文章目录......
  • 大模型训练: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下午莫队:原序列分块。询问排序:第一关键字为左端点所在块的编号,第二关键字为右端点编号。回滚莫队:适用于增加或删除操作其中一个复杂度较大,但另一个较小的情况。可以做到只使用一种操作。排序后按照左端点的块编号一块一块做。排完......
  • 浅谈如何处理大语言模型训练数据之三开源数据集介绍
    随着最近这些年来基于统计机器学习的自然语言处理的算法的发展,以及信息检索研究的需求,特别是近年来深度学习和预训练语言模型的研究以及国内国外许多大模型的开源,研究人员们构建了多种大规模开源数据集,涵盖了网页、图片、论文、百科等多个领域。在构建大语言模型时,数据的质量和多......
  • 利用未标记数据的半监督学习在模型训练中的效果评估
    数据科学家在实践中经常面临的一个关键挑战是缺乏足够的标记数据来训练可靠且准确的模型。标记数据对于监督学习任务(如分类或回归)至关重要。但是在许多领域,获取标记数据往往成本高昂、耗时或不切实际。相比之下,未标记数据通常较易获取,但无法直接用于模型训练。如何利用未标记数据来......
  • 代码随想录算法训练营Day13 | 递归遍历、迭代遍历、层序遍历
    目录递归遍历和迭代遍历:144.二叉树的前序遍历94.二叉树的中序遍历145.二叉树的后序遍历层序遍历:102.二叉树的层序遍历107.二叉树的层序遍历Ⅱ199.二叉树的右视图637.二叉树的层平均值429.N叉树的层序遍历515.在每个树行中找最大值116.填充每个节点的下一个右侧......
  • MoNA:复用跨模态预训练模型,少样本模态的福音 | ICML'24
    跨模态转移旨在利用大型预训练模型来完成可能不属于预训练数据模态的任务。现有的研究在将经典微调扩展到跨模态场景方面取得了一定的成功,但仍然缺乏对模态差距对转移的影响的理解。在这项工作中,进行了一系列关于转移过程中源表示质量的实验,揭示了更大的模态差距与较少知识重用之......