Vj做不出的蒟蒻转战BC,然后被虐哭了。。。只做出了1001。。。还能不能愉快的玩耍了T_T
算了算了,还是好好写我的题解吧。。。
这道题貌似很难,后来看了CLJ的题解发现是我太弱了。
对于k % i = k - (k div i) * i,
有性质:k % i最多sqrt(n)个,而且相同的余数一定相邻,于是二分出每个余数有几个即可。
1 /************************************************************** 2 Problem: 1257 3 User: rausen 4 Language: Pascal 5 Result: Accepted 6 Time:32 ms 7 Memory:224 kb 8 ****************************************************************/ 9 10 var 11 n, k, ans, i, l, r : int64; 12 13 begin 14 readln(n, k); 15 i := k div n; 16 l := k div (i + 1) + 1; 17 r := n; 18 while (l > 0) do begin 19 inc(ans, k * (r - l + 1) - i * (l + r) * (r - l + 1) >> 1); 20 if l = 1 then break; 21 i := k div (l - 1); 22 l := k div (i + 1) + 1; 23 r := k div i; 24 end; 25 writeln(ans); 26 end.
(p.s. 不知为何c++就是WA,于是改用Pascal写。。。)
By Xs酱~ 转载请说明
博客地址:http://www.cnblogs.com/rausen