码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces Round #289

时间:2015-02-03 10:58:53      阅读:118      评论:0      收藏:0      [点我收藏+]

标签:

A

Maximum in Table

B

Painting Pebbles

C

Sums of Digits

D

Restoring Numbers

E

Pretty Song

F

Progress Monitoring

 

 

总结

1. B题一开始有些马虎,没有读完题就开始做,结果理解错题意WA了一次(样例居然还是一次就过的…)。以后要把题目读完再开始做。这种做法虽然在读题上花费的时间多了,但却节省了更多的做题时间,所以我认为这是很有必要的。

 

题解

A. Maximum in Table

i=1 或者 j=1, a[i][j]=1; 否则,a[i][j]=a[i-1][j]+a[i][j-1]。

求a数组中最大的数。

很明显,答案就是组合数C[n][n].

 

B. Painting Pebbles

有n堆石头,第i里有a[i]个石头。现在要你把石头染色。

一共有k个颜色。要求对于某个特定颜色c,它在任意两堆的数目差不能超过1。

求可行方案。

简单题。

这题我的想法是对于每堆石头,都从1开始染,染到k之后又从1开始染。有了这个想法之后就可以发现,要满足要求,则max{a[i]}-min{a[i]}必须小于等于k。有了这个想法之后,就可以开始写代码了。

 

D. Restoring Numbers

C[i][j]=(a[i]+b[j])%k.

现在给你一个W数组,让你判断W是否可以是一个C数组。如果可以,请输出可行解。

第i行与第i-1行相减后就可以得到a[i]-a[i-1]的两个值,这两个值相差k。利用这一点就可以求到k。若是相减后得到超过两个值,那么W就不是C数组,输出”NO”即可。若是只能得到一个值,那么就让k=0x7fffffff就行了。

列的操作与行类似。

最后,我们还需要判断k是否是大于W数组中的元素。如果小于其中任何一个,那么W就不是C数组。

输出的时候,只需要令a[1]=0,b[i]=w[1][i],然后推出a[i](i>=2)就行了。

 

E. Pretty Song

求s中的元音在所有子串中出现的期望。

这道题难处理的就是分母。

刚开始想固定分母,枚举所有元音。苦思良久,也没想到应该怎么优化。

然后想固定元音,枚举长度,但是分母不好处理。后来发现,随着长度的增加,子串的个数先是线性增加(y=x),然后是保持不变(y=min(i,|s|-i+1)),最后是线性递减(y=-x+len+1)。把这三个函数除以x之后就变成y=1, y=min(i,|s|-i+1)/x, y=-1+(len+1)/x。y=1很好处理,而后面两个函数的分子都是常数,所以想到预处理出1+1/2+1/3+……+1/i的值来计算后面两个函数值的和。

Codeforces Round #289

标签:

原文地址:http://www.cnblogs.com/monmonde/p/4269272.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!