ICPC-2022网络赛第二场

本文介绍了2022年ICPC网络赛中涉及的算法和博弈问题,包括F Infinity Tree的规律寻找、A Game about Increasing Sequences的博弈策略、Non-decreasing Array的DP解决方案、Black and White Painting的模拟方法、以及Yet Another Remainder的费马小定理应用等。通过解析题目思路和提供代码示例,帮助读者理解这些问题的解决技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

F Infinity Tree 找规律

题意

每次给定一个参数k,刚开始有一个树节点,每一秒钟,每个节点会长出k个子节点,给定u和v,求出u和v的lca。

思路

经过 x 秒, 总结点数 f(x)=(k+1)(x−1)f(x) = (k + 1 ) ^ (x - 1)f(x)=(k+1)(x1)
指数级增长, 也就是说, 链长不会超过 64
t 号节点的父亲fa[t]=ceil((t−mx)/k)fa[t] = ceil ( (t - mx) / k )fa[t]=ceil((tmx)/k) mx 是严格小于t 的最大f(x)

然后两边不断的向上找就好
code

void sov() {
   
   
    ll k, x, y;
    cin >> k >> x >> y;
    ll xx = 1, yy = 1;
    for(; xx  < (ll)ceil(1.0 * x / (k + 1)); xx *= (k + 1);  // 除法避免爆ll
    for(; yy < (ll)ceil(1.0 * y / (k + 1)); yy *= (k + 1));
    while(x != y) {
   
   
        if(x > y) {
   
   
            x = (x - xx + k - 1) / k;
            for(; xx >= x; xx /= (k + 1));
        } else {
   
   
            y = (y - yy + k - 1) / k;
            for(; yy >= y; yy /= (k + 1));
        }
    }
    cout << x << "\n"  ;  
}

J A Game about Increasing Sequences 博弈

题意:

Alice,Bob在一个数组上玩游戏。

二人轮流取走头部或者尾部的一个数,每次取的数要严格大于之前取的全部的数。

无法取到的算输。

思路:
关键点, 找到一个必胜或者必败的局面

发现, 可以取的数来自于前缀上升,和后缀的下降

将可选两端分类, 把一端数字较大的叫 大端 , 一端数字较小的叫 小端

选了大端后, 那么小端就不能选了, 只能在大端选在这里插入图片描述

状态转移
在这里插入图片描述

code

 	int n, L = 1, R = 1;
    cin >> n;
    fp(i, 1, n) {
   
   
        cin >> a[i];
    }
    fp(i, 2, n) {
   
   
        if(a[i] > a[i - 1]) L++;
        else break;
    }
    fd(i, n - 1, 1) {
   
   
        if(a[i] > a[i + 1]) R++;
        else break;
    }

    if(L % 2 == 0 && R % 2 == 0) puts("Bob");
    else puts("Alice");

B Non-decreasing Array dp暴力转移

题意

给定一个非递减数组a,每次操作:

可以选择一个数ai, 不能是开头或者结尾,
先删掉这个数, 然后在选一个数, 把它变成任意数

新数组必须满足非递减

依次输出1~n次操作后 ∑(ai−ai−1)2\sum {(a_{i} - a_{i - 1})^2}(aiai1)2的最大值

思路
考虑3个点, 因为要满足非递减
所以, 如图:
在这里插入图片描述
也就是, 变化一个点等价于删除一个点

k次操作可以删除 min(n - 2, 2 * k) 个数

n 只有100, 考虑暴力转移

状态定义: fi,j,k:=考虑到第i个数,上一个数是aj,已经删除了k个数f_{i, j , k} := 考虑到第i个数, 上一个数是a_j, 已经删除了k个数fi,j,k:=考虑到第i个数,上一个数是aj,已经删除了k个数

转移: fi,j,k:=max(fj,l,k′+cal(i,j)),k′=k−(i−j+1),1<=l<jf_{i,j,k} := max( f_{j,l,k'} + cal (i, j)), k' = k - (i - j + 1), 1<= l < jfi,j,k:=max(fj,l,k+cal(i,j)),k=

### 关于2024 ICPC网络预选赛的信息 #### 参规则 国际大学生程序设计竞ICPC)作为一项全球性的事,其参规则通常保持一定的稳定性。根据以往的经验和惯例[^1],每支参队伍由三名队员组成,他们需在同一台计算机上合作完成一系列算法问题的解答。比期间不允许使用任何外部资源或工具书,仅能依赖团队成员的知识储备以及现场提供的少量参考资料。 对于具体的2024年ICPC网络预选赛而言,虽然官方尚未发布详细的最新规定,但可以推测基本框架不会发生显著变化。例如,在线形式可能继续沿用近年来因疫情而普及的方式;同时也会严格监控作弊行为以维护公平竞争环境[^2]。 #### 时间安排 关于2024年的具体时间表目前还没有确切消息公布出来。然而按照传统模式来看,整个流程一般会经历以下几个阶段: - **报名期**:预计会在年初开放注册通道供各高校提交候选名单。 - **区域选拔/网络挑战**:这通常是多轮次举行,覆盖不同大洲和地区的时间段以便更多选手参与进来体验实战氛围并争取晋级机会。 - **全球总决准备阶段**:成功突围进入最终环节者将获得额外培训指导来提升实力迎接巅峰对决时刻。 以下是基于历史数据猜测的一个大致日程示例(请注意实际日期应参照官方通知为准): | 阶段 | 开始日期 | 结束日期 | |--------------------|---------------|----------------| | 报名截止 | 2024-02-15 | | | 初步筛选结果公告 | | 2024-03-01 | | 第一轮网络资格 | 2024-03-10 | 2024-03-12 | | 复活 | 2024-04-07 | 2024-04-09 | | 半决分区 | 各区自行决定 | 各区自行决定 | #### 题目解析 由于正式试题还未出炉之前无法提供针对性分析,不过可以根据往届经典案例来进行一些通用技巧分享: ```python def example_problem(): """ 假设有一道简单的字符串匹配问题. 给定两个长度不超过1e6 的字符串S 和T(S >= T),判断是否存在子串使得两者完全一致. 如果存在返回True;否则False. """ from collections import defaultdict def kmp_preprocess(pattern): lps = [0]*len(pattern) j=0;i=1; while i<len(pattern): if pattern[i]==pattern[j]: lps[i]=j+1;j+=1;i+=1; elif j!=0: j=lps[j-1]; else : lps[i]=0;i+=1 return lps; s="abcde";t="bcd"; lps=kmp_preprocess(t); q=[]; res=False; for char in s: while(q and (not t[len(q)]==char)): last=len(q)-lps[-1];q=q[:last]; if not q or t[len(q)]==char:q.append(char); if ''.join(q)==t:res=True;break; print(res) example_problem() ``` 上述代码片段展示了一个利用KMP算法解决字符串查找的经典方法之一。当然这只是众多可能性中的很小一部分而已。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值