T1.笨笨玩糖果(sugar)

有n颗糖,两个人轮流取质数颗糖,先取不了的(0或1)为输,求先手能否必胜,能,输出最少几步肯定能赢;不能,输出-1.

一开始天真的写了一个dp,f[i]表示i颗糖最少取几次能赢或输。然而这个是错的,从对手的角度来讲,他如果必败,一定会选择让对手尽量输的晚一些。否则的话3次以内游戏肯定结束了。

所以可以用dfs套着dp,不能赢的最多步数存为负,能赢最少步数存为正,然后对每个i进行dp,分别用两个变量来保存上述两个值,在判断是否能必胜。

 

T2.笨笨的宇宙蘑菇(mushroom)

有一个长为1的蘑菇,每过一天,一个长度L>1的蘑菇会分裂为L-1和L+1两个蘑菇。求过了n天有几个蘑菇。

找规律发现,在奇数天时,会*2,在偶数天i时,会变成2i/(i+1)个……(1的时候特殊)。

但是直接高精度不知为何爆了,于是采用质因数分解。首先对于第n天,共有n-1个2,然后对分母分子分别分解,直接高精度乘低精度就好了。

 

T3.笨笨的电路(circuit)

有n个第一部分点,m个第二部分点,t个第三部分点,前两个部分点中可以有w条带权边相连(保证第二部分点间不直连),给出第三部分点中每个点和二、三部分哪两个点相连。第三部分点为输出端,输出接入数据的异或值。第一部分点和第二部分点,不和1号点连通则输出0,否则输出1。先在要从w条边中选出最小的边权,满足n+m+t号点输出给定的0或1。

非常复杂的图论题,不过好在nm均<=100,最短路部分floyed即可(这道题中这是最高效的了吧)。然后考虑输出,如果一个点传出信号为1,那么这点对答案的贡献率就是它到终点的路径数。这样的话只需要算出第二部分每个点对答案的贡献率即可。

如果要求输出1,就在第二部分里找一个贡献为奇数的点,路径最短。如果要求输出0,就找一个贡献为偶数的非零点,或者(That’s the point):两个奇数点。因为到1的最短路可能重叠。所以枚举中间点找路即可。

posted on 2016-11-17 15:11  啊?  阅读(165)  评论(0编辑  收藏  举报