首页 > 其他分享 >2024.4 模拟赛日志

2024.4 模拟赛日志

时间:2024-03-29 20:12:14浏览次数:15  
标签:2024.4 int auto det 200010 fa mp 日志 模拟

2024 年 syzx 春季训练 1(20240315)

https://www.cnblogs.com/caijianhong/p/18076181

SS240323(20240323)

http://cplusoj.com/d/senior/contest/65fd9320ccaa6dc9eee1e44f

  • [A 魔环上的树] 计数,数树,平面图三角剖分
  • [B 序列舞蹈] 斜率相关,数据结构
  • C 脱单计划 最小费用最大流,曼哈顿距离转化

\(100+100+100=300\)。

冲刺NOI2024联测1(20240329)

http://47.92.197.167:5283/contest/482

  • [A 帽子] 序列构造双射的构造题
  • [B 我希望你们永远不要用到的洗牌法] 很困难写的分治贪心题
  • [C 一路向“北” / CF1621H Trains and Airplanes] 数据结构,整除分段的值

\(10+35(50)+40(30)=85(90)\)。

反思:T1 想错方向了,往相邻颜色上面想(具体见题目),没有发现是一个构造题;T2 的暴力 dp 复杂度写成 \(O(n^4)\) 了,以为是 \(O(n^3)\) 的。然后正解也不是很会,很像省选 D2T1 迷宫守卫,这种贪心题是一个弱点。T3 结束前半小时大概知道怎么做,结果没写完,下午写完了发现有一部分是假的,但是离正解也很近。然后这个 T3 还重写了一遍。

线段树合并新写法
  1. 定义 static 的数组可以不写括号
  2. 如果 static 函数与 std 重名(如下面的 merge),需要指明
int T;
struct segtree {
  static constexpr int N = 200010 << 6;
  static int ch[N + 10][2], tot, ans[N + 10];
  static void maintain(int p) { ans[p] = ans[ch[p][0]] + ans[ch[p][1]]; }
  static void insert(int x, int k, int &p, int l, int r) {
    if (!p) p = ++tot;
    if (l == r) return ans[p] += k, void();
    int mid = (l + r) >> 1;
    if (x <= mid)
      insert(x, k, ch[p][0], l, mid);
    else
      insert(x, k, ch[p][1], mid + 1, r);
    maintain(p);
  }
  static int merge(int p, int q, int l, int r) {
    if (!p || !q) return p + q;
    int z = ++tot;
    if (l == r) return ans[z] = ans[p] + ans[q], z;
    int mid = (l + r) >> 1;
    ch[z][0] = merge(ch[p][0], ch[q][0], l, mid);
    ch[z][1] = merge(ch[p][1], ch[q][1], mid + 1, r);
    maintain(z);
    return z;
  }
  static int query(int L, int R, int p, int l, int r) {
    if (!p) return 0;
    if (L <= l && r <= R) return ans[p];
    int mid = (l + r) >> 1;
    int ret = 0;
    if (L <= mid) ret += query(L, R, ch[p][0], l, mid);
    if (mid < R) ret += query(L, R, ch[p][1], mid + 1, r);
    return ret;
  }
  int root = 0;
  void insert(int x, int k) { insert(x, k, root, 0, T - 1); }
  static segtree merge(segtree a, segtree b) {
    return {merge(a.root, b.root, 0, T - 1)};
  }
  int query(int L, int R) { return query(L, R, root, 0, T - 1); }
  int qall() { return query(0, T - 1, root, 0, T - 1); }
};
int segtree::ch[][2], segtree::tot, segtree::ans[];
int n, Q, K, col[200010];
vector<pair<int, int>> g[200010];
segtree t[200010][26];
int top[200010];
LL det[200010], f[26], w[26];
void dfs(int u, int fa, int topf) {
  top[u] = topf;
  t[u][col[u]].insert((det[u] - 1) % T, 1);
  for (auto e : g[u]) {
    int v = e.first, w = e.second;
    if (v == fa) continue;
    if (col[v] == col[u])
      det[v] = det[u] + w, dfs(v, u, topf);
    else
      det[v] = w, dfs(v, u, u);
    for (int j = 0; j < K; j++) t[u][j] = segtree::merge(t[u][j], t[v][j]);
  }
}

原来以为是单点的,写的 dsu on tree。大家可以欣赏一下狗屎 shared_ptr 代码。其实线段树更好写更短。

struct dsuontree {
    int me;
    int buc[200010], tot, rsz[200010];
    vector<pair<int, shared_ptr<int>>> qry[200010];
    map<int, int> mp;
    shared_ptr<int> ask(int u, int T) {
        if (T >= 0) {
            shared_ptr<int> ansp = make_shared<int>(-1);
            if (!mp.count(T)) {
                int t = mp.size();
                mp[T] = t;
            }
            qry[u].emplace_back(mp[T], ansp);
            return ansp;
        } else {
            return shared_ptr<int>(&rsz[u], [](int*) {});
        }
    }
    void dfs(int u, int fa, int ban, int k) {
        if (col[u] == me && det[u] >= 0)
            buc[det[u]] += k, tot += k;
        for (auto e : g[u]) {
            int v = e.first;
            if (v == fa || v == ban)
                continue;
            dfs(v, u, ban, k);
        }
    }
    void solve(int u, int fa, bool keep) {
        if (col[u] == me)
            det[u] = mp.count(det[u] % T) ? mp[det[u] % T] : -1, rsz[u] = 1;
        for (auto e : g[u]) {
            int v = e.first;
            if (v == fa || v == son[u])
                continue;
            solve(v, u, false);
            rsz[u] += rsz[v];
        }
        if (son[u])
            solve(son[u], u, true), rsz[u] += rsz[son[u]];
        dfs(u, fa, son[u], 1);
        for (auto q : qry[u]) *q.second = buc[q.first];
        if (!keep)
            dfs(u, fa, 0, -1);
    }
} robot[26];
struct func {
    map<int, LL> mp;  // record delta
    map<int, shared_ptr<int>> ques;
    shared_ptr<int> all;
    LL gen = 0;
    void askall(int me, int u) {
        for (auto e : mp) ques[e.first] = robot[me].ask(u, e.second);
        all = robot[me].ask(u, -1);
    }
    LL answer() {
        int gall = *all;
        for (auto e : ques) gall -= *e.second;
        if (gall)
            return gen;
        LL mn = 1e18;
        for (auto e : ques) {
            if (*e.second)
                mn = min(mn, mp[e.first]);
        }
        return mn + gen;
    }
};

标签:2024.4,int,auto,det,200010,fa,mp,日志,模拟
From: https://www.cnblogs.com/caijianhong/p/18104517/contests-in-202404

相关文章

  • KingbaseES数据库案例之---输出数据库日志到syslog服务器
    案例说明:生产中心需对数据库日志建立审计,需要将数据库服务器的日志发送到日志服务器集中存储并建立审计。适用版本:KingbaseESV8R3/R6案例主机架构:node201192.168.1.201#数据库主机、syslog客户端node202192.168.1.202#syslog服务器一、构建syslog服务器S......
  • KingbaseES 避免wal日志占用大量磁盘空间
    背景wal日志一直增长很快,查看归档目录也在执行归档,归档无异常,是归档执行太慢的原因吗?还是wal日志生成的太快了的原因呢?现场环境wal日志的磁盘空间比较小。分析首先我们分析可否加速归档速度呢,因为如果能加快归档速度就可以缓解wal日志所在磁盘空间紧张的问题,答案是不可以。arc......
  • Switch 和 PS1 模拟器:3000+ 游戏随心玩 | 开源日报 No.174
    Ryujinx/RyujinxStars:26.1kLicense:MITRyujinx是用C#编写的实验性任天堂Switch模拟器。该项目旨在提供出色的准确性和性能、用户友好的界面以及稳定的构建。它已经通过了大约4050个测试,其中超过4000个可以启动并进入游戏,其中大约3400个被认为是可玩的。......
  • 【日志】定时任务每分钟都执行了,但是业务日志却不再继续打印
     发现问题:一个应用,在跑定时任务,每分钟跑一次,arthas发现定时任务每分钟都在执行,但是日志文件却一条业务日志都没打印出来。发现问题时候,是下午15点,但是日志文件显示最近一条业务日志是凌晨5点打印出来的。而且,日志文件的时间戳,也是下午15点,即代表往日志文件写的动作一直都在......
  • 流域生态系统水-碳-氮耦合过程模拟
    原文链接:流域生态系统水-碳-氮耦合过程模拟https://mp.weixin.qq.com/s?__biz=MzUzNTczMDMxMg==&mid=2247599381&idx=1&sn=5de2b54900c553dac15547394057eec7&chksm=fa8204f2cdf58de4c878c3ef82a51c71dfdd4f2d7357d5b37f825b04a26d8e7aa73cb9b2c0b1&token=1105644014&la......
  • HCIA-Datacom实验日志(四)
    4 以太网基础与VLAN配置实验4.1实验介绍4.1.1实验组网拓扑4.1.2实验背景某公司根据业务需求,需要对其二层网络进行VLAN划分。同时,VLAN10为特殊VLAN,为了保证信息安全,只有某些特殊的PC才可以通过VLAN10进行网络访问。如实验拓扑图所示,可以在S1和S2交换机上配置基于接......
  • 原生js模拟电商详情页图片放大的效果
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>Document</title&g......
  • ORA-00020错误模拟及处理方法
    当数据库的连接数达到上限后,后续的登陆操作都会报ORA-00020错误,这里给出ORA-00020错误的模拟及处理方法。1.调整数据库的processes参数到251)由于processes参数是静态参数,调整时需要使用“scope=spfile”选项进行调整。sys@ora11g>altersystemsetprocesses=25scope=spfile;系......
  • Faker库模拟数据生成,批量生成手机号,姓名,邮箱,
    一、简介Faker是一个开源的Python库,由IsaacKelly创建,旨在帮助开发者在测试和开发过程中生成伪造(模拟)数据。这个库能够生成各种类型的信息,包括但不限于姓名、地址、信用卡号、公司名称等,以及各种其他类型的模拟数据,这些数据可以用于填充数据库、创建测试账户、进行单元测试等......
  • Cisco Packet Tracer模拟器下载笔记
    给初学Cisco网络设备的小伙伴演示思科模拟器下载的方法及注意事项!目录   1:百度输入“思科网络技术学院”搜索官网主页。   2:进入“思科网络技术学院”主页。   3:登录个人账号。      3-1:点击“LogIn”。      3-2:有账户自接......