2016寒假训练1

题目链接

A CodeForces 397A On Segment's Own Points

直接模拟就OK了

B CodeForces 397B On Corruption and Numbers

题意:用l到r区间的数字,看看是否可以组成金额n, 每一个价格可以取任意数量

分两种情况讨论:

第一,如果 R>=2*L-1 那么一定是yes 。因为 n % L一定是一个处于 0 ~ L-1 的数,即存在 X 属于 [ 0 , L-1 ],使得 n = k * L + X ,那么 n = (k – 1)*L + ( L + X) , 可以看出 L+X 一定位于 L ~ R之间。

第二, 设 n = k * L + X ,如果 k *R >= n 说明必有一个数 x1 可以满足要求。

C CodeForces 397C On Number of Decompositions into Multipliers

给定n个数字ai, m=a1a2a3...an 求把m分解成n个数字相乘的方案个数,最终结果%1000000007。

我们先对给定的ai 进行因式分解,即将m 进行因式分解,得到 素因子以及该素因子出现的次数。

将m分解成n个数字相乘,即这些素数因子组成n个数字。

那么我们考虑将每一个素数分为n份 (可以为空)。用到高中的组合数学,即将n件物品分为m份(可以为空)的方案数是c[N+M-1][M-1]

这题还可以使用map 优化代码

D CodeForces 397D On Sum of Fractions

题意很明显可以看出来,V(n)是 <=n 的最大素数 U(n)是严格大于n 的最小素数

我们可以看出,每一次的 1/(v*u) 最多持续 ( u-v)项,也就是这一段连续的 1/(v[i] * u[i])的和 是(u-v) / (v[i] * u[i]) 。

也就是最终的答案会是 连续的完整的(这里的完整指的是出现了 (u-v)项) 1/(vu) 加上 不完整的若干项 1/(v*u)

那么我们可以看到,有一种情况就是,答案是全部都是完整的1/(u*v),即n+1 就是素数,那么在这种情况下 我们可以看出 (a2-a1)/(a1a2) + (a3-a2)/(a2a3) = (a3-a1) / (a1a3) 也就是说最终的答案只会和首末项有关, 即最终答案为 (u[n] – 2) / ( 2u[n] )

第二种情况,会剩下 (n-v[n]+1)个 1 / (u[n]v[n]) ,也就是答案应该为 1/2 – 1/(u[n]) + (n-v[n]+1)/ (u[n]v[n])

E CodeForces 389A Fox and Number Game

辗转相除法,就是gcd

F CodeForces 389B Fox and Cross

给定一张图,问是否可以用十字架填充‘#’。 当且仅当 一个 ‘#’上下左右都是‘#’的时候才可以进行填充

做法:直接暴力for

G CodeForces 389C Fox and Box Accumulation

直接贪心,不用考虑太多

H CodeForces 389D Fox and Minimal path

这题折磨了我很久,一直都是wa

参见我的个人博客

I CodeForces 389E Fox and Card Game

题意:2个人轮流抽牌,先手只能从牌堆上方抽,后手只能从牌堆下方抽。两个人都知道现在所有牌的情况(即知道每一堆的每一张牌),要求每个人最终抽取的牌的总和尽可能大。求出两个人最终得分。

直接贪心。很显然,先手取走了一堆牌的上半堆,后手取走了一堆牌的下半堆。

那么对于牌的张数为奇数的那些堆,按照中间的那张牌的大小进行排序,然后a和b一人一张 即为最终答案。

题目+简要题解+代码

posted @ 2016-02-01 20:48  coolaaa  阅读(200)  评论(0编辑  收藏  举报