bzoj1257(数学方法)
来源:互联网 发布:提高数据运用灵活度 编辑:程序博客网 时间:2024/06/05 23:47
首先,floor(n/d)的所有情况最多有2*sqrt(n)种,那么列出所有情况,在一定的区间内n/i是相同的(因为相同可以一起算),并且显然他们的余数以n/d为公差
作等差数列求和,再将所有不同的n/i的值累积起来,就求出最终答案了
给出 100以内的模数
100
100%1 0
100%2 0
100%3 1
100%4 0
100%5 0
100%6 4
100%7 2
100%8 4
100%9 1
100%10 0
100%11 1
100%12 4
100%13 9
100%14 2
100%15 10
100%16 4
100%17 15
100%18 10
100%19 5
100%20 0
100%21 16
100%22 12
100%23 8
100%24 4
100%25 0
100%26 22
100%27 19
100%28 16
100%29 13
100%30 10
100%31 7
100%32 4
100%33 1
100%34 32可以很显然的发现都是以n/i为公差往下走,且n/i不变
100%35 30
100%36 28
100%37 26
100%38 24
100%39 22
100%40 20
100%41 18
100%42 16
100%43 14
100%44 12
100%45 10
100%46 8
100%47 6
100%48 4
100%49 2
100%50 0
100%51 49
100%52 48
100%53 47
100%54 46
100%55 45
100%56 44
100%57 43
100%58 42
100%59 41
100%60 40
100%61 39
100%62 38
100%63 37
100%64 36
100%65 35
100%66 34
100%67 33
100%68 32
100%69 31
100%70 30
100%71 29
100%72 28
100%73 27
100%74 26
100%75 25
100%76 24
100%77 23
100%78 22
100%79 21
100%80 20
100%81 19
100%82 18
100%83 17
100%84 16
100%85 15
100%86 14
100%87 13
100%88 12
100%89 11
100%90 10
100%91 9
100%92 8
100%93 7
100%94 6
100%95 5
100%96 4
100%97 3
100%98 2
100%99 1
100%100 0
K%i=K-(K/i)*i,对于i至K/(K/i)这一段K/i相同,可以一起算,可证总段数是sqrt(N)的。
复杂度:O(Sqrt(N))
/************************************************************** Problem: 1257 User: zhhx Language: C++ Result: Accepted Time:16 ms Memory:820 kb****************************************************************/ #include<cstdio>#include<algorithm>#define ll long longusing namespace std; ll n,k;int main(){ scanf("%lld%lld",&n,&k); long long ans=0; if (n>k) ans=k*(n-k),n=k;//如果n>k那么n>k的部分的模数都是k ll kk=0; for (int i=1;i<=n;i=kk+1) { kk=min(n,i+k%i/(k/i));//推出区间后端,这块要记住,以后莫比乌斯反演时也要用 ans+=(k%i+k%kk)*((k%i-k%kk)/(k/i)+1)/2;//等差数列求和,首项加末项*项数/2 } printf("%lld",ans); return 0;}
那是思维的历练,唯有如此,你才能达到成功的彼岸!! 只有完全确定自己想不出来时,才能看题解,要有绝对的思维过程
要知道,你要用你的绝对意志力支撑起思维的堡垒,在真正没有思路前,绝不放弃。
没有这样的思维锻炼,是无法突破自己的,赵和旭,你要加油!
- bzoj1257(数学方法)
- [BZOJ1257]CQOI2007余数之和|数学
- BZOJ1257余数之和sum+数学
- bzoj1257
- 【二分+数学】bzoj1257: [CQOI2007]余数之和sum
- [BZOJ1257][CQOI2007]余数之和sum(数论)
- [BZOJ1257][CQOI2007]余数求和(数论)
- bzoj1257: [CQOI2007]余数之和sum(数论)
- 【BZOJ1257】余数之和(数论分块,暴力)
- BZOJ1257 [CQOI2007]余数之和sum(枚举商)
- bzoj1257(SPOJ-NAGAY Joseph’s Problem(余数求和))(分块)
- BZOJ1257【数论】
- 打印菱形(数学方法)
- 数学方法
- [BZOJ1257][CQOI2007]余数之和
- bzoj1257[CQOI]余数之和
- BZOJ1257: [CQOI2007]余数之和
- BZOJ1257余数之和sum
- spark sql例子
- SSH进阶(7)——Hibernate使用EHCache进行二级缓存
- 职场相关术语
- Android生命周期
- 爬取新浪微博主站大法
- bzoj1257(数学方法)
- Eclipse中xml配置文件报错原因总结
- Java语法的主要特性
- 实现tab切换的功能
- ViewPaper与ViewFliper的选择
- python出现过的问题总结
- 使用jquery实现AJAX技术的几种方法
- ECMAScriptString对象
- 【好玩的计算机视觉】自动玩“别踩白块儿”