EOJ Monthly 2019.1——华东师范大学一月月赛C-E题题解

版权声明:本文为博主原创文章,转载请联系博主(通常都会同意就是了) https://blog.csdn.net/cccccwb/article/details/86548260

这一场菜到扣脚.jpg

膜爆HYX大佬.gif

A:唐纳德先生与领土扩张

待补

B:唐纳德先生与网络降级计划

待补

C:唐纳德先生与这真的是签到题吗 

很明显是一道构造题……

假设原序列为不递减的序列b[1],b[2]……,b[n],给出的序列为a[1],a[2],……,a[n*(n-1)/2]。

那么显然,a[1]=b[1]+b[2],a[2]=b[1]+b[3],而b[2]+b[3]就在他们后面的某一个中,并且一定在前n个里,因为和能小于b[2]+b[3]的组合显然只能是形如b[1]+b[x]这样子的。

因此,只要枚举之后哪一个是b[2]+b[3],就能确定下来b[1]=(a[1]+a[2]-a[x])/2,b[2]=a[1]-b[1],b[3]=a[2]-b[1]。

对于每一个目前未知的数,他的第一次加入一定是形如b[1]+b[x]的形式,因此,只要将目前已知的数的尚未出现过的组合记录下来,如果题目给出的序列的下一个是这些组合中的一个,就将记录减去一,否则就认为遇到了一个新的数字,将其记录后把他和b[2]开始的其他数字的组合加入记录。记录的方式可以采用multiset或者map来简单的实现。如果途中发现已经凑齐n个数字但还是出现了不存在于组合中的数,就说明这个解不合法,就可以继续考虑下一个b[2]+b[3]了。

效率方面,枚举b[2]+b[3]是O(n)的,由于每一个组合只会被加入和减去一次,所以用multiset判断是否可行的效率是O(nlogn),总效率为O(n^{2}logn),在n为300的这题可以低空滑过。

D:唐纳德先生与 .DOC

表面上看是一道字符串难题,实际上认真考虑就会发现,只要交换中包含D、O、C就一定是不合法的,所以可行的交换实际上就只有两个都是点的情况……所以只要扫一遍就OK了。

E:唐纳德先生与假骰子

表面上看是一道概率论难题,实际上……只要把每一个概率乘以结果,得到的结果比较一下大小,无脑梭哈最大的就OK了,因为如果你分配一些概率给别的,得到的期望显然不如将这些概率分配给最大的结果。所以只要求一下和然后除一下就好了。注意这题要开long long,我就这么WA了两次……QAQ

猜你喜欢

转载自blog.csdn.net/cccccwb/article/details/86548260
今日推荐