hdu 4120【2011 成都现场赛 J题】

鸡抬腿,数鸡腿,(1只腿居然还能抬起来,挂屋顶了?)先看出差值有变化的,可以算出一些前面的数,注意一些小TRICK即可,比如负数,末尾很多0等等,还要注意算出了n-1个的话,还可以把第n个给算出来(显然,第n种鸡的数量就是接下来鸡腿的减少值,鸡腿数是现在还剩下的腿数除以鸡的数量加上之前抬起的腿数)。

重点是计算不确定的,转化为

x[1]*a[1]+x[2]*a[2]+...+x[unsure]*a[unsure]=sum  其中 min<=x[i]<x[i+1] sigma(a[i])=sa. a[i]>0 问解的情况 .

x表示这种鸡的腿数,a表示这种鸡的数量,unsure表示还有unsure种鸡不确定,第一步的减少量为da=A[0]-A[1],sa=da-sigma(之前可以算出来的a)

注意由于抬了k次脚(最后全是0的话去掉多于的0,只保留一个0)x有个最小的值min为k,而不是x[sure]+1,继续转化一下就是  min=1的情况

考虑左边式子的最小值为 MIN=1*(sa-unsure+1)+2+3+....+unsure  先讨论unsure>=3的情况 记d=sum-MIN  如果d=0 显然只有1解,如果d=1 也只能把最大的unsure变为unsure+1,如果d=2 那么可以移动unsure 和 倒数第二个数 一起移动一格 也可以只移动unsure两格 所以为多解,d>2同理 ,搞定

如果只有两个未知数,数据范围1000,n^2暴力解决, 这不是热身赛第三题的暴力威哥做法吗?

各种TRICK自己注意,最小值的确定比较关键。代码很搓,不挂了。

posted on 2011-11-10 18:45  yaoz10051538  阅读(1296)  评论(1编辑  收藏  举报

导航