2020 区域赛(南京)

这是一篇关于2020年亚洲区域赛(南京)算法问题的总结,涵盖A到M共13道题目。其中包括神题、经典结论和巧妙解法,涉及字符串处理、图论、概率计算、动态规划等多个领域。

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

亚洲区域赛(南京)

 

A: Ah, It's Yesterday Once More

 

打表题,我也不知道为什么

 

B:Baby's First Suffix Array Problem

神题

 

C:Certain Scientific Railgun

神题

 

D:Degree of Spanning Tree

给出一个图,求一棵生成树,它的所有节点的度数不超过 n/2。

这里有一个结论是:对于一棵树,最多只有一个节点的度数超过n/2。假设树有n个点,则有n-1条边,总度数是2*(n-1)。如果有两个节点的度数超过n/2,其他节点的度数为1,那么总度数则>n+(n-2)=2*(n-1)。

因此没有度数大于n/2时直接输出生成树

否则,取度数大于n/2的节点为根,尝试使用非树上的边替换与根相连的边。

    得出的生成树与根断开,形成独自的块(并查集维护)。然后枚举非树上的边且不与根连接的边,重新生成新的树。当使用边时,根的度数和对应的块减1,边的两个节点度数对应加1.如果加上后大于n/2,则需要回退。

 

if(f(u)!= f(v)) {
  d[u]++;
  d[v]++;
  int iny = ft[f(v)]; //和根连接的点
  d[idx]--;
  d[iny]--;
  if(d[u]>n/2 || d[v]>n/2){ //加上非树边后,度数超过n/2
	d[idx]++;
	d[iny]++;
	d[u]--;
    d[v]--;
    continue;
  }					
  vis[iny]=1;
  e[i].ok =1;
  e[i^1].ok=1;
  fa[f(v)] = f(u);
}

E: Evil Coordinate

给出一个UDLR字符串表示机器人的动作序列。机器人一开始在(0,0), 有一个炸弹在(mx,my)。问是否存在一个字符串的排列使得机器人根据这个排列去走不会经过(mx,my)。

 

字符串的终点是固定的,如果起点或者终点在(mx,my),则无解。将上下左右合并,然后枚举走的顺序,如果合法则输出

 

F: Fireworks 

制作花火,每制作k次则需要m分钟去点亮。每制作一次需要n分钟,花火被点亮的概率是p。制作完k个花火后,如果有花火被点亮后则停止,否则继续。

 

k次花火有一支被点亮的概率为q=1-(1-p)^k.则被点亮的期望次数是1/q. 总时间是k*n+m。

求k使得值最小。3分求极值

 

G: Go

神题

 

H: Harmonious Rectangle

给出一个n,m的矩阵,里面填1,2,3。求有多少种填法,使得存在一个子矩阵(x1,y1) = (x1,y2), (x2

### 2023 ICPC 亚洲区域 南京站 比详情 #### 比概述 2023 ICPC 亚洲区域南京站是一场高水平的程序设计竞,吸引了众多高校的优秀选手参与。该事不仅考验参者的算法能力,还对其团队协作能力和快速解决问题的能力提出了较高要求[^1]。 #### 部分题目解析 以下是部分题目的简要描述及其解法思路: ##### C. Primitive Root 这道题目涉及原根的概念以及数论相关内容。其核心在于寻找满足特定条件的整数作为模意义下的原根。解决此问题通常需要枚举并验证可能的候选值是否符合条件。 ##### F. Equivalent Rewriting 本题主要考察字符串处理技巧与模式匹配方法的应用。通过构建有限状态自动机或者运用正则表达式技术可以有效实现等价重写的判断逻辑。 ##### G. Knapsack G题是一个经典的背包问题变种版本,在传统动态规划基础上增加了额外约束条件——即允许免费获取一定数量宝石的情况下最大化总价值。具体来说,“Little Cyan Fish 的商店今天正在进行促销活动。任何访问者都可以挑选任意 k颗宝石并将它们带回家完全无需付费!”因此,在给定预算W美元的前提下,采用最优策略计算可获得的最大宝石美丽度成为关键所在[^4]。 ```python def max_beauty(W, values, weights, k): n = len(values) dp = [[[-float('inf')] * (k + 1) for _ in range(W + 1)] for __ in range(n + 1)] dp[0][0][0] = 0 for i in range(1, n + 1): v_i, w_i = values[i - 1], weights[i - 1] for j in range(W + 1): for l in range(k + 1): if j >= w_i and l > 0: dp[i][j][l] = max(dp[i][j][l], dp[i - 1][j - w_i][l - 1] + v_i) dp[i][j][l] = max(dp[i][j][l], dp[i - 1][j][l]) result = max(max(row[:]) for row in dp[n][:]) return result if result != -float('inf') else 0 ``` ##### H. 谜题 H题属于构造类难题之一。“构造对象非常具象”,意味着它更侧重于实际场景模拟而非理论推导。例如,根据输入数据生成符合规则的游戏方案或路径序列等均属此类范畴[^2]。 ##### I. Counter I题围绕计数器操作展开讨论,重点是如何高效维护多个变量之间的关系变化过程,并在此过程中完成指定查询请求的回答工作。 #### 参体验分享 对于初次参加线上形式举办的ICPC比的同学而言,整体感受较为正面:“由于使用自己熟悉的设备进行答题,所以整个流程相对顺畅舒适。”不过也有遗憾之处,比如未能品尝到当地特色美食——鸭血粉丝汤[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值