第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(上海)

链接:https://ac.nowcoder.com/acm/contest/9925

B Mine Sweeper II

题意:给定一张 n × m n\times m n×m 的扫雷图 A 和 B。让你修改 B ,使得它们扫雷图上的数字之和相加相等。修改次数不超过 ⌊ n m 2 ⌋ \lfloor \frac {nm}{2} \rfloor 2nm

思路

  • 首先分析一下 A 和 A 的反图,可以发现它们的数字之和是相等的。可以对有雷和无雷连一条边。边的数量,就是贡献的数量。现在把图取反了,依然是原来的连边情况,贡献不变。
  • 所以计数图 A 和 B 的不同点的数量,如果超过了一半,就输出 A 的反图就好了。

C Sum of Log (数位DP)

题意
在这里插入图片描述

思路

  • 枚举两维 i 和 j ,把式子分为两部分。左边部分,用数位DP计算的个数 cnt ,右边部分在枚举的 i 和 j 第一次取 1 的时候(也就是在 i + j 取最高位的时候),累加到答案上去。

D Walker

题意:在 [ 0 , n ] [0,n] [0,n] 上有两个人,分别在 p 1 , p 2 p_1,p_2 p1,p2,速度为 v 1 , v 2 v_1,v_2 v1,v2 。问最短需要多少时间走完全程。

思路:分成两部分

  • 一个人走完全程: p + n v \frac {p+n}{v} vp+n 或者是 n − p + n v \frac{n-p+n}{v} vnp+n
  • 两个人相对这走
  • 两个人分别走一部分:那么就在 p 1 p_1 p1 p 2 p_2 p2 之中枚举一个点走。三分这个点的位置即可。

E The Journey of Geor Autumn

题意:给定 n、k,问有多少个长度为 n n n 的排列满足对任意的 i ∈ [ k , n ] i \in [k,n] i[k,n] a i > m i n ( a i − 1 , … , a i − k ) a_i>min(a_{i-1},\dots,a_{i-k}) ai>min(ai1,,aik)

思路

  • 这里唯一的限定在于最小值的位置。它只能出现在 [1,k] 的位置。最小值位置 p 确定之后,p 的左边可以任意排,p 的右边与左边的联系,也因为最小值的关系而消失了,所以右边变成了一个新的子问题。
  • 设 dp[i] 表示长度为 i 的排列的方案数
  • d p [ i ] = ∑ j = 1 m i n ( i , k ) d p [ i − j ] × C ( i − 1 , j − 1 ) × ( j − 1 ) ! dp[i]=\sum_{j=1}^{min(i,k)} dp[i-j] \times C(i-1,j-1)\times (j-1)! dp[i]=j=1min(i,k)dp[ij]×C(i1,j1)×(j1)!
  • 优化一下可得:
    d p [ i ] i ! = ∑ j = 1 m i n ( i , k ) d p [ i − j ] ( i − j ) ! × 1 i \frac {dp[i]}{i!}=\sum_{j=1}^{min(i,k)} \frac {dp[i-j]}{(i-j)!} \times \frac 1i i!dp[i]=j=1min(i,k)(ij)!dp[ij]×i1

G Fibonacci (签到)

思路:把奇数 * 奇数的情况排除。

H Rice Arrangement

题意:内外两个环分别有 k 个点散布在 0 到 n - 1 上。现在对它们做匹配,问至少要转动多少的距离,才能够使得 k 个点都恰好匹配一次, 且匹配的结构刚好是 1 对 1 的。

思路

  • 首先要想到:每个点和最终的匹配点之间连线,是没有交点的。不然一定不是最优的。
  • 然后就可以枚举外环的点与内环的点匹配,然后得到每个点需要转动的距离 c。这里记录的都是顺时针方向的距离,也就是 b i + d b_{i+d} bi+d 顺转动 c i c_i ci 可以到达 a i a_i ai 。(只有统计同一方向上的 c ,才能够做)
  • 对这些距离 c c c 从小到大排序。对于一个 c i c_i ci 来说,如果顺时针走 c i c_i ci 步,那么小于等于 c i c_i ci 都可以满足,如果逆时针走 n − c i n-c_i nci 步,那么所有大于等于 c i c_i ci 的都可以满足条件。
  • 所以,就可以利用距离的间隔来更新答案。 c 1 c_1 c1 是最小的所以可以绕一圈来更新答案,即 n − c 1 n-c_1 nc1。或者直接用最大值 c k c_k ck 顺时针走 c k c_k ck 步。
  • 然后就可以枚举 c i c_i ci c i + 1 c_{i+1} ci+1 。先让 c i c_i ci 顺着走,然后倒回来,在让 c i + 1 c_{i+1} ci+1 逆时针走。即 2 c i + n − c i + 1 2c_i+n-c_{i+1} 2ci+nci+1。也可以先让 c i + 1 c_{i+1} ci+1 逆时针走,再让 c i c_i ci 顺着走,即 2 ( n − c i + 1 ) + c i 2(n-c_{i+1})+c_i 2(nci+1)+ci

I Sky Garden

题意:求 n 个环,m 条等分线之间所有交点的距离之和。

思路

  • 对于第 i 个环,首先计算环内的贡献。然后计算对第 j ∈ ( 1 , i − 1 ) j \in(1,i-1) j(1,i1) 个环的贡献。

L Traveling in the Grid World

题意:给定一个网格图。一条轨迹定义为:起点和终点在网格上。中间没有穿越过其他的整点。问从(0,0) 达到(n,m) 的轨迹的最短长度是多少。

思路

  • 先判断 (0,0) 能否直接到达 (n,m) 。即 gcd(n,m)=1 时,不会穿过其他点
  • 然后就是找一个其他的点 (x,y) ,通过这个点来转折。此时只需要枚举 x ,通过斜率计算 y ,让 y 在斜率的附近选择点来更新答案即可。

M Gitignore

题意:给定 n 个可忽略的文件名, m 个不可忽略的文件名。问最少可以忽略几个文件名。

思路:给文件名按照前缀动态开点。给不可忽略的文件,最后设置 sz 为 1 。从叶走到根,更新 sz 。如果一个点的 sz >0 就说明不可被忽略。

  • 然后从根走到叶,走到的第一个 sz 为 0 的点,就是可以忽略的,累积答案。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值