首页 > 其他分享 >BOI 2024 Day1

BOI 2024 Day1

时间:2024-09-26 21:04:00浏览次数:1  
标签:const int auto ll Day1 2024 BOI MAXN 初始

Luogu P10759

题目描述

你有 \(N\) 个一次性的工作,完成第 \(i\) 个工作可以获得 \(x_i\) 的利润(可能为负)。有些工作依赖于其他工作,第 \(i\) 个工作必须在第 \(p_i\) 个工作完成之后进行。若 \(p_i=0\),则 \(i\) 没有依赖。

你初始有 \(S\) 元,求你最多能获得多少元。

思路

在一个点的子树内,有一些负的点,使得你不能越过它,除非你的初始金额更高或赚了钱。我们对每个点记录其子树中目前还做不起的工作,记录其至少需要的初始金额和其收益,使得其收益非负。

然后对于每个点,我们对他的儿子按所需初始金额从小到大排序,把能做的都做了。当我们做了一个儿子时,其子树也都能做了,所以我们要把儿子的儿子也放进来,这个可以用 set 和启发式合并解决。

最后,对于根节点,我们用类似的方法求解。我们不断对其儿子需要的初始金额求最大值,直到初始金额 \(>s\),那么退出。

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

代码

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

const int MAXN = 300001;

struct Node {
  int x, y, u;
};

struct cmp {
  bool operator()(const Node &a, const Node &b) const {
    return a.x < b.x || (a.x == b.x && a.y > b.y) || (a.x == b.x && a.y == b.y && a.u < b.u);
  }
};

int n, f[MAXN];
set<Node, cmp> S[MAXN];
ll s, a[MAXN];

int main() {
  ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  cin >> n >> s;
  for(int i = 1; i <= n; ++i) {
    cin >> a[i] >> f[i];
  }
  for(int i = n; i >= 1; --i) {
    ll X = 0;
    for(; a[i] < 0 && !S[i].empty(); ) {
      auto [x, y, u] = *S[i].begin();
      S[i].erase(S[i].begin());
      if(S[i].size() < S[u].size()) {
        swap(S[i], S[u]);
      }
      for(auto x : S[u]) {
        S[i].insert(x);
      }
      X = max(X, x - a[i]);
      a[i] += y;
    }
    if(a[i] >= 0) {
      S[f[i]].insert({X, a[i], i});
    }
  }
  ll X = 0;
  for(; !S[0].empty(); ) {
    auto [x, y, u] = *S[0].begin();
    S[0].erase(S[0].begin());
    if(S[0].size() < S[u].size()) {
      swap(S[0], S[u]);
    }
    for(auto x : S[u]) {
      S[0].insert(x);
    }
    X = max(X, x - a[0]);
    if(X > s) {
      break;
    }
    a[0] += y;
  }
  cout << a[0];
  return 0;
}

Luogu P10761

题目描述

有 \(N\) 个车站 \(1,2,\dots,N\),第 \(i\) 个车站能到达 \(i+j\cdot d_i(1\le j\le x_i且i+j\cdot d_i\le N)\)。

求从 \(1\) 到其他站的不同方案数。

思路

使用根号分治。

若 \(d_i> \sqrt N\),那么最多只有 \(\sqrt N\) 个转移,直接做,

否则,转移可以看作转移到 \(i\equiv j\pmod {d_i}\),对每个模数,余数记录并转移即可。

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

代码

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

const int B = 317, MAXN = 1000005, MOD = int(1e9) + 7;

int n, dp[MAXN], cnt[B + 5][B + 5], ans;
vector<tuple<int, int, int>> ve[MAXN];

int main() {
 ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
 cin >> n;
 dp[1] = 1;
 for(int i = 1, d, x; i <= n; ++i) {
   cin >> d >> x;
   for(int j = 1; j <= B; ++j) {
     dp[i] = (dp[i] + cnt[j][i % j]) % MOD;
   }
   ans = (ans + dp[i]) % MOD;
   for(auto [val, x, y] : ve[i]) {
     cnt[x][y] = (cnt[x][y] - val + MOD) % MOD;
   }
   if(!d || !x) {
     continue;
   }
   if(d <= B) {
     cnt[d][i % d] = (cnt[d][i % d] + dp[i]) % MOD;
     ve[min(i + 1ll * x * d, 0ll + n)].emplace_back(dp[i], d, i % d);
   }else {
     for(int j = 1; j <= x && i + 1ll * j * d <= n; ++j) {
       dp[i + j * d] = (dp[i + j * d] + dp[i]) % MOD;
     }
   }
 }
 cout << ans;
 return 0;
}

标签:const,int,auto,ll,Day1,2024,BOI,MAXN,初始
From: https://www.cnblogs.com/yaosicheng124/p/18434350

相关文章

  • 2024.9.26 ThreadLocal
    在使用ThreadLocal的情况下,并发量很高时不会产生冲突,原因如下:1.线程隔离:ThreadLocal为每个线程提供独立的存储空间。每个线程都可以安全地设置和获取其自己的变量值,而不会影响其他线程。即使在高并发环境下,线程间的数据是隔离的。2.并发安全:ThreadLocal本身是线程安......
  • [2027届]NOIP2024模拟赛#6
    全真模拟赛。1:30开考。看了T1,发现\(O(m\logn)\)的暴力很好写,直接50pts到手。然后发现每次不用一个一个改,而且改完以后可以直接区间改,但是一直没有找到合适的东西维护复杂度。往下翻了翻数据发现\(2\)的整次幂这个性质很好写,但是写挂了。此时时间已经过去了1.5h,于是......
  • 喜讯 | 宝兰德「应用服务器软件 V9.5」荣获“2024年度优秀软件产品”殊荣
    近日,中国软件行业协会公布了“2024年度推广优秀软件产品”名单。经过专家委员会的评议及最终审核,宝兰德凭借领先的技术能力和丰富的经验积累,中间件核心产品「应用服务器软件V9.5」获评“2024年度优秀软件产品”。本次评选活动由中国软件行业协会发起,从自主创新、技术水平、产品质......
  • 2024.9.26 计划
    项目下午读论文,用gpt搞懂怎么实时生成热力图,以及如何叠加信号学习上午ROS学习下午-晚上DP总结ROS学习-进程通信(接昨天)遇到了问题:Invoking"makecmake_check_build_system"failed解决方式:功能包里不能有重复名称的节点,检查工作区中是否有其他CMakeLists.txt文......
  • 龙芯3A6000+loongnix20.6操作系统安装idea社区版2024和docker
    龙芯3A6000+loongnix20.6操作系统安装idea社区版和docker1.搭建目标:安装jdk8安装idea社区版-2024(需要jdk17)安装docker(可选)配置docker自动补全(可选)如何使用docker拉取镜像(可选)2.配置说明主机:中科云3A6000NUC操作系统:loonignix-20.63.安装jdk3.1安装jdk8打开桌......
  • 20240926测试
    a题面:有一个\(n\timesm\)的\(01\)矩阵,求其中\(1\)的个数在\([l,r]\)的子矩阵数量题解:令\(f_k\)为\(1\)的个数\(\lek\)的子矩阵数量,答案为\(f_r-f_{l-1}\)。\(n\)较小,暴力枚举上下区间,在内用双指针维护和小于等于\(k\)的段,复杂度\(\text{O}(n^2m)\)。......
  • NOIP2024集训Day39 DP
    NOIP2024集训Day39DPA.[AGC002F]LeftmostBall反向考虑,从最终状态,倒退它能指向多少种初始状态。dp策略:从左往右放,每次对最左边的一个空位,要么放一个白球,要么放一个有颜色的球,同时把该种颜色剩下的球都放到后面的位置去。具体的:定义\(f_{i,j}\)表示当前有\(i\)个白球......
  • 【20省选十联测day10】Easy Win
    【20省选十联测day10】EasyWin题意原题链接有\(n\)堆石子,\(n\le5\times10^5\),每堆石子有\(a_i\)个,\(a_i\len\)。Alice和Bob每次可以从,某一堆取至少\(1\)颗、至多\(x\)颗石子,不能取的失败。Alice先手,问对于所有\(1\lex\len\),问谁胜利。思路对于一堆石子,计......
  • 网络安全(黑客)2024小白自学必看
      ​一、怎样规划网络安全如果你是一个安全行业新人,我建议你先从网络安全或者Web安全/渗透测试这两个方向先学起一、是市场需求量高二、则是发展相对成熟入门比较容易 值得一提的是,学网络安全,是先网络后安全;学Web安全,也是先Web再有安全。安全不是独立存在的,而是建立......
  • 网络安全(黑客)2024小白自学必看
      ​一、怎样规划网络安全如果你是一个安全行业新人,我建议你先从网络安全或者Web安全/渗透测试这两个方向先学起一、是市场需求量高二、则是发展相对成熟入门比较容易 值得一提的是,学网络安全,是先网络后安全;学Web安全,也是先Web再有安全。安全不是独立存在的,而是建立......