ARC118

Day 5

感觉得调整一下作息,vp AT 的时间不能太晚

赛时又有点意识不清醒了,明明这场的 D 着实不难的(

A

A - Tax Included Price (atcoder.jp)

\(A\)每增加1,里面那个\(\frac{100+t}{100}A\)就会增加\(1 < \frac{100+t}{100} <2\),于是导致$\lfloor \frac{100+t}{100}A \rfloor $增大 1 或者 2

增加1没什么,增加2那显然中间会跨过一个值,同时使得\(\lfloor \frac{100+t}{100}A \rfloor - A\)增大1

于是我们去二分找最小的x满足\(\lfloor \frac{100+t}{100}x \rfloor - x=n\),那么答案就是\(\lfloor \frac{100+t}{100}x \rfloor-1\)

Submission #23499797 - AtCoder Regular Contest 118

B

B - Village of M People (atcoder.jp)

要求最小化\(\max|\frac{b_i}{m}-\frac{a_i}{n}| = \max |\frac{b_in-a_im}{nm}|\),忽略常量分母,最小化整数\(\max|b_in-a_im|\)即可

二分差值x,这样就限定了\(b_i\)的取值范围,令\(L_i=\max(\lceil \frac{a_im-x}{n} \rceil,0),R_i=\lfloor \frac{a_im+x}{n} \rfloor\),即需要满足\(L_i \le b_i \le R_i\)

判断是否满足\(\sum L_i \le m \le \sum R_i\)即可判断可行性,构造一组解的时候就先都取\(L_i\)再酌情往上加即可,时间复杂度\(O(k \log (nm))\)

Submission #23500173 - AtCoder Regular Contest 118

官方题解还给了一种贪心的思路,假设我们不强制要求\(b_i\)为整数,那么问题就很简单了,直接按比例换算即可,令\(b_i=\frac{a_im}{n}\)即有差值为0

考虑先暂且下取整$b_i=\lfloor \frac{a_im}{n} \rfloor \(,然后我们显然需要令其中的\)k=m-\sum b_i$个数增大1

只要按照\(b_in-a_im \le 0\)从小到大排序,然后选择前k个最小的即可

C

C - Coprime Set (atcoder.jp)

算是一道思路巧妙的打表题

要求满足(1)任意两个数不互质(2)所有数的公约数为1,简单思考不难构造这样一组解:\(\{2\times3,2\times5,3\times5\}\)

考虑如何扩大这组解,(2)时刻满足所以只要保证(1)就可以。发现只要再放入的数至少含有\(\{2,3,5\}\)这3个质因数中的某2个即可,打表发现\(10000\)以内这样的数有\(2666\)个(含已经放进去的那3个),于是这道题就这样(很离谱地)做完了

Submission #23500424 - AtCoder Regular Contest 118

D

D - Hamiltonian Cycle (atcoder.jp)

这几天做的 D 里面最简单的一个了,可惜赛时被细节杀了

转化一下题意就是有标号\([1,p-1]\)的点,然后对于每个\(x\)要连双向边\((x,ax),(x,bx)\),求哈密顿回路

诶这个我知道这不就是【UNR #4】挑战哈密顿 - 题目 - Universal Online Judge (uoj.ac)

首先根据费马小定理显然有\(a^{p-1} \equiv 1 \pmod{p}\),然后如果接触过一些阶和原根的相关知识的话,也不难想到反复乘\(a\)的周期\(ca\)一定满足\(ca|p-1\)(没接触过这个也挺显然的)

于是关于这张图的一个基本的观点是:若只单独考虑\(a\),那么整张图相当于是由\(\frac{p-1}{ca}\)个长度为\(ca\)的环构成的,只考虑\(b\)也同理,但关键是如何将这二者结合起来看

首先能注意到图的一个相似性,由于乘a乘b的先后顺序不会影响最后的落点,如果以\(a\)的环为参考系,那么\(b\)的每一个环所穿过\(a\)的环的顺序一定是相同的,而且与\(a\)的环的交点是等距的,也就说\(b\)的每个环在\(a\)的参考系下是平行的。所以我们只考虑\(b\)的某一个环即可

冷静整理思考一下,不难发现有解的一个必要条件是:任意一个\(b\)的环都必须要穿过\(a\)的每一个环

也就是,先把图分割成若干个\(a\)的环,然后当我们在某个环\(x\)的某个点\(u\)上乘\(b\)后它必须落在另一个环上,并且反复乘\(b\)的话它能够经过每一个环再回到环\(x\)(但不一定回到点\(u\)

上述是从图论角度理解的,如果从数论角度来解释,有解的必要条件为:

取集合\(C=\{a^i|i \ge 0\}\),然后令\(n=|C|\)\(m \ge 1\)为最小的满足\(b^m \in C\)的数,则应当有\(nm=p-1\)

下面我们证明,如果满足了这个必要条件,我们一定可以构造出一组解,也就是说这个条件其实是充要的

\(\forall x \in [1,p-1]\),一定存在唯一的一组\(i\in[0,n-1],j\in[0,m-1]\)使得\(x=a^ib^j\),也就是形成双射

证明:假设\(x=a^{i_1}b^{j_1}=a^{i_2}b^{j_2}\),那么有\(a^{i_1-i_2}=b^{j_1-j_2} \in C\),于是\(m|j_1-j_2\)与假设矛盾,即每个\(x\)唯一对应一组\(i,j\);然后每个\(i,j\)也显然唯一对应一个\(x\)

因此我们可以断定\(\forall x\in[1,p-1]\),都唯一对应着\(n*m\)网格图上的某一个点,这与我们在上面图论角度的猜想是一致的

而且\(n*m=p-1\),当\(p>2\)\(n\)\(m\)中一定有一个是偶数,对其构造哈密顿回路方法多种多样,这里不多加赘述

如果\(n\)\(m\)中有某一个数为1,特判一下这种情况,走到终点然后由周期性再回到起点即可

PS1:在代码中,只要求出n然后假设m=(p-1)/n,正常构造即可,如果中间走着走着出现了重复说明假设有误返回无解,这样代码可能会好写一些(?),不过各自求出n、m也不是多难的事情好像

PS2:不开long long见啥来着......

Submission #23505178 - AtCoder Regular Contest 118

posted @ 2021-06-16 13:32  _SingerCoder  阅读(167)  评论(0编辑  收藏  举报