做题总结经验(慢慢来总结吧!)
<一>:
今天用骗数据的方法做了多校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个