acdream Divide Sum
Divide Sum
Problem Description
for(int i = 1; i <= n; i
++)
for(int j = 1; j <= n; j ++)
ans += a[i] /
a[j];
给出n,a[1]...a[n],求ans
Input
不超过5组数据,每组数据:
第一行n(1 <= n <= 10^5)
第二行n个数,a[1].. a[n] (1 <= a[i] <= 10^5)
Output
Sample Input
5
1 2 3 4 5
Sample Output
27 用 n/i = n/(i+k)的方法找上届和下届,统计出现次数,超时。
贴一个代码:
/*
* this code is made by 987690183
* Problem: 1181
* Verdict: Time Limit Exceeded
* Submission Date: 2014-09-01 12:47:21
* Time: 1000MS
* Memory: 2848KB
*/
#include<iostream>
#include<stdio.h>
#include<cstring>
#include<cstdlib>
using namespace std; int date[];
int num[];
int sum1[];
int main()
{
int n;
int maxn;
while(scanf("%d",&n)>)
{
memset(num,,sizeof(num));
maxn = -;
for(int i=;i<=n;i++) {
scanf("%d",&date[i]);
num[date[i]] ++;
if(date[i]>maxn) maxn = date[i];
}
sum1[]=;
for(int i=;i<=maxn;i++)
sum1[i] = sum1[i-]+num[i]; long long sum = ;
if(n>)
for(int i=;i<=maxn;i++)
{
if(num[i]>)
for(int j=,la = ;j<=i;j = la+)
{
la = i/(i/j);
sum = sum + (long long)(sum1[la]-sum1[j-])*(i/j)*num[i];
}
}
else
{
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
sum = sum+date[i]/date[j];
}
}
printf("%lld\n",sum);
}
return ;
}
为什么超时,我很疑惑,因为最坏的情况下1-10^5个数字,只出现一次。
时间应该也是n*sqrt(n);
和ac代码比较也是一样吧。超时代码唯一不同的是有许多*,/的运算。
ac代码:只有+
思路:统计数字x的出现次数num[],然后求前n项和用sum1[]保存
然后改变一下思路,求对于第i个数字来说,被多少数字/过,
举例:i = 2,n =9;
那么首先[2-9]里的数字能除i+[8-9]能除i.这有数字8,9就算了两次。
知道统计第i个数字被多少数字/过,就不难理解。
/*
* this code is made by 987690183
* Problem: 1181
* Verdict: Accepted
* Submission Date: 2014-09-01 14:41:17
* Time: 72MS
* Memory: 2848KB
*/
#include<iostream>
#include<stdio.h>
#include<cstring>
#include<cstdlib>
#include<math.h>
using namespace std; int date[];
int num[];
int sum1[];
int main()
{
int n;
int maxn;
while(scanf("%d",&n)>)
{
memset(num,,sizeof(num));
maxn = -;
for(int i=;i<=n;i++) {
scanf("%d",&date[i]);
num[date[i]] ++;
if(date[i]>maxn) maxn = date[i];
}
sum1[]=;
for(int i=;i<=maxn;i++)
sum1[i] = sum1[i-]+num[i]; long long ans = ;
long long sum = ;
for(int i=;i<=maxn;i++)
{
if(num[i])
{
ans = ;
for(int j=i-;j<=maxn;j=j+i)
ans = ans+n-sum1[j]; //!!!!
sum = sum + ans*num[i];
}
}
printf("%lld\n",sum);
}
return ;
}
acdream Divide Sum的更多相关文章
- Divide Sum 比赛时竟然想不出。。。。。。。
Divide Sum Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) SubmitSt ...
- ACdream: Sum
Sum Time Limit: 2000/1000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others) SubmitStatisticN ...
- acdream 1431 Sum vs Product
Sum vs Product Time Limit: 4000/2000MS (Java/Others)Memory Limit: 128000/64000KB (Java/Others) Submi ...
- ACdream 1431——Sum vs Product——————【dfs+剪枝】
Sum vs Product Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) S ...
- ACDream - Power Sum
先上题目: Power Sum Time Limit: 20000/10000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others) S ...
- ACDream - Lowbit Sum
先上题目: C - Lowbit Sum Time Limit: 2000/1000MS (Java/Others) Memory Limit: 128000/64000KB (Java/Others ...
- hdu 1261 字串数
解题思路:ACM紫书 第十章 P319 有重复元素的全排列 答案: 所有数的和的阶乘 除以 每个数阶乘的乘积 因为给定 (26*12)! 会爆掉(long long),这里用java 的BigInte ...
- [Ramda] Compose and Curry
Curry: The idea of Curry is to spreate the data from the function. Using Curry to define the functio ...
- dax学习
增长率 = (DIVIDE(SUM('业绩达成'[实际业绩]),CALCULATE(SUM('业绩达成'[实际业绩]),PREVIOUSMONTH('业绩达成'[周期])))-1)*100上月业绩 = ...
随机推荐
- A letter to a good guy in USA
Hi Nick:Busy recently forgetting to check Yammer in box.Really nice of you to agree to provide help ...
- vs2010打包系统必备选择.net framework 3.5sp1编译错误的解决方法
利用visual studio 2010进行打包程序,默认安装的是Framework 4.0,如果需要将3.5sp1打包到系统中一起安装(选择了"从与我的应用程序相同的位置下载系统必备组件& ...
- cookie和session区别
cookie和session区 session是在服务器端保存用户信息,cookie是在客户端保存用户信息 session保存的是对象,cookie保存的是字符串 session会随回话结束而关闭,c ...
- TF255466: Team Foundation Server 的配置过程无法继续。以前的更新或安装需要重
在验证是否可以安装 SharePoint 时的提示,Error [ System Checks ] TF255466: The configuration process for Team Found ...
- js高级程序设计笔记之-addEventListener()与removeEventListener(),事件解除与绑定
js高级程序设计笔记之-addEventListener()与removeEventListener(),事件解除与绑定 addEventListener()与removeEventListener( ...
- springmvc+spring+mybatis分页查询实例版本1,ver1.0
无聊做做看看,几乎没有怎么仔细做过这方面的,总是以为很简单,想想就会,实际做起来结合工作经验感觉还是挺有收获的,可以用在自己的项目上 第一版本思路:框架使用ssm,这个无所谓,采用分页语句查询指定页面 ...
- 给uefi引导的方式安装archlinux
基本就是照着官方的wiki来的,不过官方的wiki的内容太杂了,或许我们需要的是一个瀑布似的流程. 其实大体上与mbr引导的方式类似,只凭借回忆说一下有区别的地方,等下一次有机会的时候再验证一下. 换 ...
- SQL的主键和外键约束(转)
SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外 ...
- MySQL rename database如何做?
虽然MySQL里面有rename database的语法,但是只是在5.1.7 to 5.1.23提供的,其他版本并没有,要想做rename操作该如何做呢?percona提供了一个shell #!/b ...
- 转载WPF SDK研究 之 AppModel
Jianqiang's Mobile Dev Blog iOS.Android.WP CnBlogs Home New Post Contact Admin Rss Posts - 528 Artic ...