[编程题] 有趣的数字
来源:互联网 发布:应聘淘宝客服 编辑:程序博客网 时间:2024/05/13 02:02
编程题] 有趣的数字
时间限制:1秒
空间限制:32768K
小Q今天在上厕所时想到了这个问题:有n个数,两两组成二元组,差最小的有多少对呢?差最大呢?
输入描述:
输入包含多组测试数据。 对于每组测试数据: N - 本组测试数据有n个数 a1,a2...an - 需要计算的数据 保证: 1<=N<=100000,0<=ai<=INT_MAX.
输出描述:
对于每组数据,输出两个数,第一个数表示差最小的对数,第二个数表示差最大的对数。
输入例子1:
645 12 45 32 5 6
输出例子1:
1 2
思路: 对于最大的,是判断最小的个数,和最大的个数乘法
判断最大的个数,从左到右扫过去
#include <iostream>#include <stdlib.h>#include <string.h>#include <stdio.h>#include <queue>#include <algorithm>#include <cstring>using namespace std;typedef long long ll;ll a[100005];int main(){ int n; while(cin>>n){ for(int i=1;i<=n;i++) cin>>a[i]; if(n==1) {cout<<0<<" "<<0<<endl;continue;} sort(a+1,a+1+n); ll maxx=-1, minn=0x3f3f3f3f3f; ll maxx_n=1,minn_n=1; for(int i=2;i<=n;i++) if(a[i]==a[i-1]) minn_n++; else break; if(minn_n==n) cout<<n<<" "<<n<<endl; else{ for(int i=n-1;i>=1;i--) if(a[i]==a[i+1]) maxx_n++; else break; ll ans2=maxx_n*minn_n; ll left=1,ans1=0; for(int i=2;i<=n;i++) { if(a[i]-a[i-1]<minn) minn=a[i]-a[i-1],ans1=1; else if(a[i]-a[i-1]==minn) ans1+=left; if(a[i]==a[i-1]) left++; else left=1; } cout<<ans1<<" "<<ans2<<endl; } }}/*61 1 1 2 2 2*/
阅读全文
0 0
- [编程题] 有趣的数字
- [编程题] 有趣的数字
- [编程题] 有趣的数字
- [编程题] 有趣的数字
- 有趣的数字----腾讯2017暑期实习生编程题
- 腾讯2017实习生编程题之有趣的数字
- 腾讯2017暑假实习生编程题有趣的数字
- 2016腾讯实习生笔试编程题:有趣的数字
- 腾讯2017 暑假实习生编程题---【3】 有趣的数字
- 腾讯2017暑期实习生编程题-有趣的数字
- 腾讯2017暑期实习生编程题-C-有趣的数字
- 腾讯2017暑期实习生编程题--有趣的数字
- 腾讯2017暑期实习生编程题之有趣的数字
- 腾讯2017暑期实习生编程题:有趣的数字 [python]
- 【算法题】有趣的数字
- 有趣的逻辑数字题
- 穷举法-有趣的数字(腾讯2017实习生编程题)
- 腾讯2017暑期实习生编程题(三)----有趣的数字
- python中join的用法
- View的mScrollX,mScrollX
- Linux 系统中 Python 编程环境
- 交房手续及流程
- Java学习笔记(一)scanner.math.character类方法
- [编程题] 有趣的数字
- maven(六)maven配置文件
- 从零开始的"E"世界(J2SE)
- Centos6.5 安装教程
- Python3.0 实现决策树算法
- Spring 模块分类
- 关于mybatis的@Param注解和参数
- 心情不好
- Python安装numpy