CQOIX2007余数之和
朴素能得个差不多吧……
这题改进算法真恶心
pascal一直过不了,难道非得转c++?
代码:(pascal)
var n,k,i,l,r,m:longint;
ans:qword;
function ceil(x:real):longint;
begin
if trunc(x)<x then exit(trunc(x)+) else exit(trunc(x));
end;
procedure main;
begin
readln(n,k);
ans:=;
if n>k then
begin
inc(ans,(n-k)*k);
n:=k;
end;
m:=ceil(sqrt(k));
for i:= to m do inc(ans,k mod i);
for i:= to m do
begin
l:=(k div (i+))+;
r:=(k div i);
if l<=m then l:=m+;
if r>n then r:=n;
if r<l then continue;
inc(ans,(((k<<)-i*(l+r))*(r-l+)>>));
end;
writeln(ans);
end;
begin
main;
end.
代码:(c++)
#include <iostream>
#include <cmath>
using namespace std; long long ans,n,k;
int main() {
ios::sync_with_stdio(false);
cin>>n>>k;
if (n>k) {
ans+=k*(n-k);
n=k;
}
long long sqrtk=ceil(sqrt(k));
for (long long i=;i<=sqrtk;++i) ans+=k%i;
for (long long a=;a<=sqrtk;++a) {
long long L=floor(k/(a+))+;
long long R=floor(k/a);
if (L<=sqrtk) L=sqrtk+;
if (R>n) R=n;
if (R<L) continue;
ans+=((k<<)-a*L-a*R)*(R-L+)>>;
}
cout<<ans;
}
另一种分块方法,pascal还是过不了……
#include <cmath>
#include <cstdio>
#include <algorithm> long long n, k, ans;
int main()
{
scanf("%lld%lld", &n, &k);
if (n > k)
{
ans += (n-k)*k;
n = k;
}
ans += n * k;
for (long long i = , last; i <= n; i = last+)
{
last = std::min(n, k/(k/i));
ans -= (k/i) * (i+last) * (last-i+1) / 2;
}
printf("%lld", ans);
}
CQOIX2007余数之和的更多相关文章
- BZOJ 1257: [CQOI2007]余数之和sum
1257: [CQOI2007]余数之和sum Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 3769 Solved: 1734[Submit][St ...
- 【BZOJ1257】【CQOI2007】余数之和sum
Description 给出正整数n和k,计算j(n, k)=k mod 1 + k mod 2 + k mod 3 + … + k mod n的值,其中k mod i表示k除以i的余数.例如j(5, ...
- 51nod1225 余数之和
打表可以看出规律.分块求就可以了. #include<cstdio> #include<cstring> #include<cctype> #include< ...
- [原博客] BZOJ 1257 [CQOI2007] 余数之和
题目链接题意: 给定n,k,求 ∑(k mod i) {1<=i<=n} 其中 n,k<=10^9. 即 k mod 1 + k mod 2 + k mod 3 + … + k mo ...
- bzoj 1257: [CQOI2007]余数之和sum 数学 && 枚举
1257: [CQOI2007]余数之和sum Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 1779 Solved: 823[Submit][Sta ...
- BZOJ 1257: [CQOI2007]余数之和sum( 数论 )
n >= k 部分对答案的贡献为 k * (n - k) n < k 部分贡献为 ∑ (k - ⌊k / i⌋ * i) = ∑ , ⌊k / i⌋ 相等的数是连续的一段, 此时这段连 ...
- 1257: [CQOI2007]余数之和sum
1257: [CQOI2007]余数之和sum Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 2001 Solved: 928[Submit][Sta ...
- BZOJ 1257: [CQOI2007]余数之和sum【神奇的做法,思维题】
1257: [CQOI2007]余数之和sum Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 4474 Solved: 2083[Submit][St ...
- 51Nod 1225 余数之和 [整除分块]
1225 余数之和 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 难度:5级算法题 收藏 关注 F(n) = (n % 1) + (n % 2) + (n % 3) + ... ...
随机推荐
- (转载)异构数据库之间完全可以用SQL语句导数据
<来源网址:http://www.delphifans.com/infoview/Article_398.html>异构数据库之间完全可以用SQL语句导数据 告诉你一个最快的方法,用SQL ...
- c 递归函数浅析
所谓递归,简而言之就是应用程序自身调用自身,以实现层次数据结构的查询和访问. 递归的使用可以使代码更简洁清晰,可读性更好(对于初学者到不见得),但由于递归需要系统堆栈,所以空间消耗要比非递归代码要大很 ...
- bootstrap IE兼容
<meta name="viewport" content="width=device-width, initial-scale=1"> & ...
- spring接收参数
public class LogonModel { private String UserName; private String Password; public String getUserNam ...
- Matlab生成.dll文件在.NET中加载失败与平台的关系及解决方案
问题链接地址:http://bbs.elecfans.com/forum.php?mod=viewthread&tid=207995
- 从JAVA多线程理解到集群分布式和网络设计的浅析
对于JAVA多线程的应用非常广泛,现在的系统没有多线程几乎什么也做不了,很多时候我们在何种场合如何应用多线程成为一种首先需要选择的问题,另外关于java多线程的知识也是非常的多,本文中先介绍和说明一些 ...
- 【BZOJ 1040】 [ZJOI2008]骑士
Description Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争.战火 ...
- c# 赋值后最后一项数据部分丢失
赋值,赋值后 原因,在添加后立即调用clear()清除数据....
- [转载]C#导入XLS数据到数据库
Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/--> ...
- 自助Linux之问题诊断工具strace
转 http://www.cnblogs.com/bangerlee/archive/2012/02/20/2356818.html 引言 “Oops,系统挂死了..." “Oops,程序 ...