51nod1305
来源:互联网 发布:debian 软件源配置 编辑:程序博客网 时间:2024/05/30 04:32
1305 Pairwise Sum and Divide
题目来源: HackerRank
基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题
收藏
关注
有这样一段程序,fun会对整数数组A进行求值,其中Floor表示向下取整:
fun(A)
sum = 0
for i = 1 to A.length
for j = i+1 to A.length
sum = sum + Floor((A[i]+A[j])/(A[i]*A[j]))
return sum
给出数组A,由你来计算fun(A)的结果。例如:A = {1, 4, 1},fun(A) = [5/4] + [2/1] + [5/4] = 1 + 2 + 1 = 4。
Input
第1行:1个数N,表示数组A的长度(1 <= N <= 100000)。第2 - N + 1行:每行1个数A[i](1 <= A[i] <= 10^9)。
Output
输出fun(A)的计算结果。
Input示例
31 4 1
Output示例
4
李陶冶 (题目提供者)
C++的运行时限为:1000 ms ,空间限制为:131072 KB 示例及语言说明请按这里
题目分析:这个题目首先看数据肯定是不能用暴力去解决的,因为肯定会超时。这个题目关键在于发现所定义的公式其实是为两个数的倒数相加之和向下取整的值,所以很容易知道只有当其中大的倒数大于等于1/2时和取整才会大于0,否则为0。知道这个就好办了,先把这些数从小到大排序,当其中较小的数大于2时,直接跳出循环,因为后面的两个数的倒数之和肯定会等于0。
代码:
#include <iostream>#include <algorithm>using namespace std;#define size 100010int main(){ int n,a[size]; long long sum=0; cin>>n; for(int i=1;i<=n;i++){ cin>>a[i]; } sort(a+1,a+n+1); for(int i=1;i<=n;i++){ for(int j=i+1;j<=n;j++){ if(a[i]<3){ sum+=int(1.0/a[i]+1.0/a[j]); } else{ break; } } } cout<<sum<<endl; return 0;}
0 0
- 51nod1305
- 51nod1305 Pairwise Sum and Divide
- 51nod1305 Pairwise Sum and Divide
- 51nod1305 Pairwise Sum and Divide
- 51nod1305 Pairwise Sum and Divide
- 51nod1305 Pairwise Sum and Divide
- 51
- 51
- 51
- 51
- 51
- 51
- 51
- 51Job?51吐槽!
- 51总结
- 51计划
- 51job
- 练习51
- 笔记(4月29日)
- 决策树算法
- 订单系统开发(仿淘宝和美团网) 之 项目总结(降低数据库并发量)
- Android 7.0 系统应用提前获得runtime-granted permission
- URI和URL的区别
- 51nod1305
- 轻社群系统“ThinkSNS + ”移动端产品研发播报
- 史上全详细制作远程推送证书以及用极光进行远程推送教程
- 使用AsyncTask 自定义加载图片(接口回调)
- 既然iOS原生支持二维码扫描了,为什么不用??
- {图}好看的progressBar
- IP头,TCP头,UDP头,MAC帧头定义
- 可视化培训时变数据篇:当时间变化后,数据呈现的是这样的美图
- ZOJ 3964 Yet Another Game of Stones (博弈)