51NOD - 1305 Pairwise Sum and Divide(思维)
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示例
3 1 4 1
Output示例
4
按照题目的意思来模拟的话,代码应该是如下所示:
#pragma GCC optimize(2)
#include <bits/stdc++.h>
using namespace std;
#define clr(a) memset(a,0,sizeof(a))
#define line cout<<"-----------------"<<endl;typedef long long ll;
const int maxn = 1e5+10;
const int MAXN = 1e6+10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9+7;
const int N = 1010;ll n;
ll a[maxn];
ll fun(ll n){ll sum = 0;for(int i = 1; i <= n; i++){for(int j = i + 1; j <= n; j++){sum = sum + floor((a[i] + a[j]) / (a[i] * a[j]));}}return sum;
}int main(){scanf("%lld", &n);for(int i = 1; i <= n; i++){scanf("%lld", &a[i]);}printf("%lld\n", fun(n));return 0;
}
毫无疑问,肯定超时。我们再来重新思考一下这道题目。
对于两个数 x , y. floor((x + y) / (x * y)) 只可能有三种情况。0 、 1 、 2
当
x == 1 y == 1 的时候结果为2
x == 1 y == R 的时候结果为1
x == 2 y == 2 的时候结果为2
分别统计1 和 2 出现的次数 统计其对结果的贡献
#pragma GCC optimize(2)
#include <bits/stdc++.h>
using namespace std;
#define clr(a) memset(a,0,sizeof(a))
#define line cout<<"-----------------"<<endl;typedef long long ll;
const int maxn = 1e5+10;
const int MAXN = 1e6+10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9+7;
const int N = 1010;int n;
int a[maxn];int main(){scanf("%d", &n);int num1 = 0, num2 = 0;for(int i = 1; i <= n; i++){scanf("%d", &a[i]); if(a[i] == 1) num1 ++;else if(a[i] == 2) num2 ++;}ll ans = 0;ans += num2 * (num2 - 1) / 2;ans += num1 * (n - 1);cout << ans << endl;return 0;
}
51NOD - 1305 Pairwise Sum and Divide(思维)相关推荐
- Educational Codeforces Round 108 (Rated for Div. 2) D. Maximum Sum of Products 思维 + dp
传送门 文章目录 题意: 思路: 题意: 给你两个长度为nnn的数组a,ba,ba,b,你可以至多反转一段连续区间,求∑i=1nai∗bi\sum _{i=1}^n a_i*b_i∑i=1nai∗ ...
- 【CodeForces - 1150C】Prefix Sum Primes(思维)
题干: We're giving away nice huge bags containing number tiles! A bag we want to present to you contai ...
- 【51Nod - 1344】走格子 (思维)
题干: 有编号1-n的n个格子,机器人从1号格子顺序向后走,一直走到n号格子,并需要从n号格子走出去.机器人有一个初始能量,每个格子对应一个整数Aii,表示这个格子的能量值.如果Aii > 0, ...
- 【51Nod - 1279】 扔盘子(思维)(on-p会超时)
题干: 有一口井,井的高度为N,每隔1个单位它的宽度有变化.现在从井口往下面扔圆盘,如果圆盘的宽度大于井在某个高度的宽度,则圆盘被卡住(恰好等于的话会下去). 盘子有几种命运:1.掉到井底.2.被卡住 ...
- B. Equalize by Divide - 思维+构造+排序
题意: 给定一个数组,可以进行任意多次以下操作: 1.选择第i和第j个数. 2.使a[i]=a[i]/a[j](向上取整). 不可以插入或者删减数组元素,求多少次使数组元素都相同,输出次数以及每次操作 ...
- 史上最全的Java学习路线
java基础 一.Java的历史和三大版本 1. Java的发展史 2. Java语言能做什么 二.Java的开发环境 1. 配置开发环境 三.Java的第一个程序及运行原理 JVM 的组成部分 写第 ...
- 信息学奥赛一本通(C++版) 第二部分 基础算法 第九章 动态规划
总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 第二部分 基础算法 第九章 动态规划 第一节 动 ...
- KDD Cup 2020 推荐系统赛道:数据分析
写在前面 近期对推荐系统颇为感兴趣,正巧看到今年KDD Cup赛题中有两道都是推荐相关的,借着这次机会学习学习.本文将对其中的一道,KDD Cup 2020 Challenges for Modern ...
- 正整数分解为几个连续自然数之和
题目:输入一个正整数,若该数能用几个连续正整数之和表示,则输出所有可能的正整数序列. 一个正整数有可能可以被表示为n(n>=2)个连续正整数之和,如: 15=1+2+3+4+5 15=4+5+6 ...
最新文章
- stm32换芯片编译
- mysql 单号,利用 MySQL 自增列生成订单号
- A different twist on pre-compiling JSPs--reference
- java miniui datagrid_miniui datagrid 的客户端分页解决方案
- python3 socket 接收 bytes 长度 会变,Python解析Socket数据流异常bytes的问题(详细)...
- c++ 基本知识汇总
- Visual Leak Detector 2.2.3 Visual C++内存检测工具
- 网格搜索、随机搜索和贝叶斯调参总结与python代码实践
- 最短路径(状压dp)(ybtoj)
- 加解密篇 - 非对称加密算法 (RSA、DSA、ECC、DH)
- 我的python中级班学习之路(全程笔记第一模块) (第二章)(第3部分:元祖、哈希(hash)、字典、集合...
- java覆盖的概念_java中覆盖是什么意思?java方法覆盖的概念详解
- 复杂sql语句:按部门统计人数
- Linux软件开发工程师
- java awt canvas_java.awt 类 Canvas - Java 中文参考手册
- 使用js获得26个英文字母
- 云计算为什么发展_为什么快速发展的公司需要云计算? 第1部分
- 硬盘/分区克隆:怎么无损迁移老硬盘数据到新硬盘?
- java 时分秒加减_JAVA日期加减运算
- MySQL 客户端安装