做题总结经验(慢慢来总结吧!)

<一>:

今天用骗数据的方法做了多校2的1002 1003感觉很爽,跟rh讨论这个题目时,他给我说了一个做这种大数据的经验YM。

http://acm.hdu.edu.cn/showproblem.php?pid=4311

http://acm.hdu.edu.cn/showproblem.php?pid=4312

(这里给出很多点的操作)

像这种O(n^2)可以解决的问题,但是数据量太大会tle的,我们可以选择小数据用O(m*n)来做,大数据则是枚举左右K个数,k取决于不超时的前提下的最大值了。(值越大对的可能性就越大)。

ps:出题人出卡题的数据大多数会手写,手写的话也只是小数据量,O(m*n)大多数情况下就能过,而大数据则是随机生成了,用K也可能会水过。

 

<二>

昨天做了zoj月赛的一道题目http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3622

题意就是给定正整数y所有x加在其最左边形成z 满足z mod y = 0 给定[m,n]区间求y的个数;

当然条件好找了,一位数满足被10整除的书,二位数满足被100整除的数.......打个表就好了。可是关键在于后边灵活的处理a[0] = 1 a[1] = 2 a[2] = 5 a[3] = 10 a[4] = 20 a[5] = 25

    1,2,5,10,20,25,50,
    100,125,200,250,500,
    1000,1250,2000,2500,5000,
    10000,12500,20000,25000,50000,
    100000,125000,200000,250000,500000,
    1000000,1250000,2000000,2500000,5000000,
    10000000,12500000,20000000,25000000,50000000,
    100000000,125000000,200000000,250000000,500000000,
    1000000000,1250000000,2000000000,2500000000,5000000000

a[6] = 50 [m,n]区间的统计,这里看到一个统计方法很好,记下来:

for(k=i=0;i<nu;i++)//循环dp(存的y)
 if(m<=dp[i]&&n>=dp[i])
            k++;
 printf("%d\n",k);

 

 <三>

[1,n]能被x整出的数有n/x个

 

 

 

posted @ 2012-07-27 17:23  E_star  阅读(338)  评论(2编辑  收藏  举报