Codeforces Round #462 (Div. 2)

我好菜呀,居然还在打 div.2… 比赛传送门


A. A Compatible Pair

给两个集合 A,B ,Tommy 先从 A 中删除一个数,Banban 再从 A,B 中各选一个数 a,b , Tommy 想使 a×b 尽可能小,Banban 想使 a×b 尽可能大。
求在两者都选择最优策略下 a×b 的值。( |A|,|B|55

显然可以直接枚举删除的数,枚举选的两个数 O(|A|3) ,然而我一开始直接写了一个 O(|A|) 做法,细节可能较多,于是被 Hack 了两次…

My Code


B. A Prosperous Lot

定义一个十进制下的一个数的值为各个数位上的数所构成的圆圈数之和,如 1=0,4=1,8=2
求出任意一个值为 k 的数,要求这个数小于 1018 。( 1k109

构造题。显然当 k>36 时无解;若 k 是奇数则先输出一个 4 ,然后 k=k1 ;若 k 是偶数则输出 k2 8

My Code


C. A Twisty Movement

给定一个序列 A ,你可以翻转其中的一个区间内的数,求翻转后的序列的最长不下降子序列。( |A|20001ai2

目测我可能想复杂了。
先倒着算出每个区间的最长不下降子序列的值,由于 1ai2 ,每次可以根据之前的答案,再根据 ai O(1) 计算出最长不下降子序列;
再用预处理出每段区间 ai=2 的值;
开始动态规划,记 f[i][0/1] 表示做到第 i 位是否翻转了区间时的最长不上升子序列的长度,
于是只要对于不同的 ai 进行分类讨论,再根据之前预处理出的值,做到第 i 位时再枚举一下到哪段区间是翻转的即可。
可以推广到 ai 无限制。

My Code


D. A Determined Cleanup

给定两个数 p,k ,求出一个多项式 f(x) 满足系数均小于 k 且为非负整数,且 f(x)=q(x)(x+k)+p q(x) 也为一个多项式。
1p1018,2k2000

稍微看一下还是很好懂得。
将多项式 q(x) 展开:

f(x)=(qnxn+..+q1x+q0)(x+k)+p
f(x)=(kqn+qn1)xn+..+(kq1+q0)x+(kq0+p)

将多项式 f(x) 展开:
anxn+...+a1x+a0==(kqn+qn1)xn+..+(kq1+q0)x+(kq0+p)

将系数一一对应:
an=kqn+qn1
...
a1=kq1+q0
a0=kq0+p

很显然了, 我们只需要从次数小的往大的枚举,每次我们知道 qi1 的值,只需要调节 qi kqi+qi1 的值控制在 [0,k) 之间即可, qi 等于 0 ,则已经求出了该多项式 f(x)
复杂度 O(logpk)

然而比赛时没开 long long 于是没 rush 出来…

My Code


E. A Colourful Prospect

n 个大小不同的圆去切割一个平面,求切割出了多少个平面( 1n3,10x,y10,1r10

比赛时没时间,居然被 A 题给卡了(被叉了)······ 现在看来 n 3 ,应该分类讨论一下就好······

猜你喜欢

转载自blog.csdn.net/steaunk/article/details/79327259