Contest Page

A

对于一个长度为\(L\)的相同字符段,显然要花费\(\frac{L}{2}\)次操作才能使得相邻不相同。于是只需要分类讨论一下首尾字符是否相同,算出每种字符、每种长度的连续字符段出现了多少次即可。

B

首先当图不是二分图的时候肯定无解,否则可以发现答案的上界是图上两点的最短路最大值,且不难构造出达到答案上界的方案。于是bfs/Floyd求出这个值即可。

C

可以把题目转换成:每一次把该数的最低位异或\(1\)放到最高位上,问要多少次才能够与原数相同。这样看来每一个数经过\(2N\)次一定会回到原数。那么哪些数操作次数少于\(2N\)?手玩可以发现:一个数能表示成\(AA'AA'...A\)的循环结构,其中\(A\)是\(01\)串,\(A'\)是其所有位异或\(1\)得到的串。这样的数只需要\(2|A|\)次操作。注意分成的段数要是奇数,否则仍然需要\(2N\)次操作。

枚举\(A\)的长度\(l\)计算有多少个串循环节长度是\(l\)的约数。因为\(A\)确定了串就确定了,同时相当于枚举串的较高位,所以至多只有一个串需要判断是否小于等于\(S\)。最后容斥算多少个串循环节恰好是\(l\)。复杂度\(O(Nd(N))\)。

D

对于圆上三个点\(A,B,C\),取弧\(AB,BC,AC\)的中点\(D,E,F\),可通过圆周角定理证明\(\Delta DEF\)的垂心与\(\Delta ABC\)的内心重合。

考虑\(\Delta DEF\),根据欧拉线,因为\(\Delta DEF\)的外心是\(O(0,0)\),重心是\((\frac{x_D+x_E+x_F}{3} , \frac{y_D+y_E+y_F}{3})\),所以垂心就是\((x_D+x_E+x_F,y_D+y_E+y_F)\),这样\(D,E,F\)三个点贡献独立。枚举\(AB\),考虑其两段弧的中点答案的贡献。

E

先枚举一个点\(i\),\((1,i)\)连边。那么接下来的问题就是\([2,i) \cup (i,2N]\)中的点互相连边的问题。

考虑跨过点\(i\)的边,它们的两端点有单调性,即左半部分编号递增时,右半部分编号递减。枚举跨过点\(i\)的在左半部分编号最小的边\((j,k)\),那么剩余的点,要么先与\(j\)相交、要么先与\(i\)相交、要么先与\(k\)相交,且这样的点在编号上均分布为一段区间。枚举与\(j\)相交的点中最大的编号\(p\)、与\(k\)相交的点中最大的编号\(q\),那么可以分别递归到\([2,j) \cup (j,p]\)、\([p+1,i) \cup (i,q-1]\)、\([q,k) \cup (k,2N]\)的三个子问题。

用记搜实现计算过程,虽然状态数\(O(N^3)\)但有用状态不多。复杂度\(O(N^7)\)。

F

考虑一个朴素的DP:设\(f_{i,j,k}\)表示矩阵\(A\)有\(i\)行\(j\)列最小值\(\leq k\)的方案数。注意到\(N,M,K \leq 100\),但是这样的状态在转移时无可避免的要同时枚举\(i,j\)的增量,因为它们的影响都在\(A\)上,所以转移的位置有交。

对问题做一个小转化,可以发现权值相当于是额外填了一个矩阵\(B\)满足\(B\)的每个位置小于等于\(A\)中对应位置的行列最小值,那么权值相当于是\(B\)的方案数。发现对于\(B\)的限制等价于\(B\)的行列最大值小于\(A\)的对应行列最小值。

此时我们有了两个矩阵\(A,B\),考虑将状态一个放\(A\)上一个放\(B\)上:设\(f_{i,j,k}\)表示\(A\)中\(i\)列\(\leq k\)、\(B\)中\(j\)行\(\leq k\)的\(A,B\)矩阵填法总数。

若确定\(B\)中某行最大值为\(k+1\),则矩阵\(A\)上对应行确定了列最小值的位置可以填入\(\geq k +1\)的数;在矩阵\(B\)上对应行没有确定列最小值的位置可以填入\(\leq k+1\)的数,且要保证至少有一个位置填\(k+1\);

若确定\(A\)中某列最小值为\(k+1\),则矩阵\(A\)对应列确定了行最大值的位置可以填入\(\geq k+1\)的数,且至少有一个位置填\(k+1\);在矩阵\(B\)对应列没有确定行最大值的位置可以填入\(\leq k+1\)的数。

可以发现\(A,B\)两个矩阵的填入无交,所以将这两者的转移看成两个阶段即可。预处理转移系数,复杂度\(O(NMK(N+M))\)

AGC039的更多相关文章

  1. 【做题记录】AtCoder AGC做题记录

    做一下AtCoder的AGC锻炼一下思维吧 目前已做题数: 75 总共题数: 239 每一场比赛后面的字母是做完的题,括号里是写完题解的题 AGC001: ABCDEF (DEF) AGC002: A ...

  2. Atcoder比赛副站

    https://agc039.contest.atcoder.jp/

随机推荐

  1. FPM Search里给查询条件加OVS搜索帮助

    FPM里的OVS用法基本和WDA一致. 1,将OVS类添加到SEARCH.(可以单独写个类,因为这里为了方便,就和SEARCH放一起了) IF_FPM_GUIBB_OVS~HANDLE_PHASE_0 ...

  2. 未能加载文件或程序集“Spire.Pdf, Version=4.8.8.2020, Culture=neutral, PublicKeyToken=663f351905198cb3”或它的某一个依赖项。未能授予最小权限请求

    问题:运行程序执行到代码报错:未能加载文件或程序集“Spire.Pdf, Version=4.8.8.2020, Culture=neutral, PublicKeyToken=663f3519051 ...

  3. Golang 需要避免踩的 50 个坑(二)

    前言 Go 是一门简单有趣的编程语言,与其他语言一样,在使用时不免会遇到很多坑,不过它们大多不是 Go 本身的设计缺陷.如果你刚从其他语言转到 Go,那这篇文章里的坑多半会踩到. 如果花时间学习官方 ...

  4. 05、ip划分+网络配置+虚拟化基础+基本路由

    -- IP   IANA (Internet Assigned Numbers Authority) ,Internet号分配机构.负责对IP地 址分配规划以及对TCP/UDP公共服务的端口定义.国际 ...

  5. 八、collection系列-----计数器、有序字典、默认字典、可命名元组、双向队列、单向队列一.计数器(对字典的扩展)

    一.计数器(对字典的扩展) 有如下一个字典: dic = {'k1':123,'k2':123,'k3':12} 统计12出现的次数,123出现的次数   1.统计出现次数 >>> ...

  6. frame标签和frameset

    框架: 属性 值 描述 frameborder 0 1 规定是否显示框架周围的边框. longdesc URL 规定一个包含有关框架内容的长描述的页面. marginheight pixels 定义框 ...

  7. PAT 乙级 1042.字符统计 C++/Java

    题目来源 请编写程序,找出一段给定文字中出现最频繁的那个英文字母. 输入格式: 输入在一行中给出一个长度不超过 1000 的字符串.字符串由 ASCII 码表中任意可见字符及空格组成,至少包含 1 个 ...

  8. Python基础之函数定义及文件修改

    函数 函数的定义 #登录函数和注册函数 def register(): """注册函数""" username = input('请输入你的 ...

  9. Super Fish

        Super fish is a common fun and leisure game. It's a game that tests your intelligence and memory ...

  10. Pandas | 08 重建索引

    重新索引会更改DataFrame的行标签和列标签. 可以通过索引来实现多个操作: 重新排序现有数据以匹配一组新的标签. 在没有标签数据的标签位置插入缺失值(NA)标记. import pandas a ...