hdu 4565 - so easy
摘要:题意:求ceil((a+√b)n)%m,0< a, m < 215, (a-1)2< b < a2, 0 < b, n < 231。思路:若(a+√b)n == x + y·√b(x、y为整数),则(a-√b)n == x - y·√b。又因为a-1 < √b < a,所以0 < (a-√b)n < 1,即x-1 < y·√b < x,所以ceil((a+√b)n) == 2x。接下来事情就容易多了,同时对x、y两部分进行快速幂取模即可,证明略。 1 #include <cstdio&g
阅读全文
UVA 12293 - Box Game
摘要:题意:bulabulabula,本质上就是两人轮流操作,把一个正整数a转化为b,b<a<=2b。最后谁摊上1谁就输了。思路:第一想法就是找到必胜态和必败态。以前我总结的一个经验是:必胜态只能转化为必败态:必败态既可以转化为必胜态,又能转化为必败态,但是一定能转化为必胜态。这题恰恰反过来了。最初的必败态是n=1,然后推算可得,必败态为n=2^i-1。 1 #include <cstdio> 2 int main() 3 { 4 int n; 5 while(scanf("%d",&n),n) 6 { 7 if(n&(n+1))print
阅读全文
切蛋糕
摘要:有5个小朋友分一个蛋糕,只能切3刀,怎样才能平均呢?答:一刀砍死一个小朋友,然后两刀分成4块。咳咳,开个玩笑。题意:用n个平面最多能把空间分成多少块。这是我第一次在比赛现场推出一道数学题,表示内牛满面。要解决这题,可先从它低一级的问题入手,即:n条直线最多能把平面分成多少块。这个很容易想,如果已有x条线,则第X+1条直线最多与原有直线交得X个点,将这条直线分成X+1段,其中每段都把一个原有块分成两块,所以增加了X+1块,即:f(x+1) - f(x) = x+1。f(x)就是一个二阶等差数列。然后再回到三维问题,同理,第X+1个平面与原有平面最多交得X条直线,当这X条直线在新平面上形成的图形满
阅读全文
poj - 3286 How many 0's?
摘要:题意:给出一个区间[a,b],求里面的数中共出现多少个0。最初我和小T讨论的结果是逐位计算,先算个位,再算十位……不过TLE了。后来参考扯男的思路,在此基础上又改进了一下。代码中pow[]就是10的次方,g[i]表示所有 i 位数中含有多少个0(不过这个数组被我砍掉了),s[i]就是g[]的前 i 项和。f[i]不好讲解,例:f[2]表示从00、01……到99中有多少个0,f[3]表示从000、001、……到999中有多少个0。说到思路嘛,拿35017做例子吧。在cal()中,首先计算的是[0,9999]、[10000,29999]两部分,根据已经打好表的数组可直接求。然后再从次高位到最低位循
阅读全文