BNUOJ-50393-Carries
来源:互联网 发布:淘宝修改我的评价 编辑:程序博客网 时间:2024/06/10 23:23
B. Carries
Time Limit: 1000msMemory Limit: 65536KB 64-bit integer IO format: %lld Java class name: Main
Submit Status PID: 50393
frog has n integers a1,a2,…,an, and she wants to add them pairwise.
Unfortunately, frog is somehow afraid of carries (进位). She defines \emph{hardness} h(x,y) for adding x and y the number of carries involved in the calculation. For example, h(1,9)=1,h(1,99)=2.
Find the total hardness adding n integers pairwise. In another word, find
∑1≤i<j≤nh(ai,aj)
.
Input
The input consists of multiple tests. For each test:
The first line contains 1 integer n (2≤n≤105). The second line contains n integers a1,a2,…,an. (0≤ai≤109).
Output
For each test, write 1 integer which denotes the total hardness.
Sample Input
2
5 5
10
0 1 2 3 4 5 6 7 8 9
Sample Output
1
20
题意:多组输入,第一行n,下一行有n个数字,输出这n个数字两两组合产生的进位次数。
思路:一位数加上一位数的结果是两位数,那这次运算一定产生了进位。同理,两位数加上两位数的结果是三位数,那这次运算一定也产生了进位。
公式归纳:如果num1%temp*10+num2%temp*10>=temp*10则产生了进位
代码
#include<stdio.h>#include<math.h>#include<iostream>#include<algorithm>#include<string.h>using namespace std;const int maxn=100005;int num1[maxn];int num2[maxn];int main(){ int N; while(~scanf("%d",&N)) { for(int i=0; i<N; i++) scanf("%d",&num1[i]); int temp=1;//进制 long long int sum=0;//记录进位总数 for(int i=0; i<9; i++)//九位数 { temp=temp*10; for(int j=0; j<N; j++) num2[j]=num1[j]%temp; sort(num2,num2+N);//升序排列 int flag=N;//临时记录N for(int j=0; j<N; j++) { while(flag&&num2[j]+num2[flag-1]>=temp)//找到进位的边界 flag--; flag<=j?sum+=(N-flag-1):sum+=(N-flag); } } printf("%lld\n",sum/2); } return 0;}
对于排序过后的那部分,还可以用二分查找进一步优化到O(nlogn);
- BNUOJ-50393-Carries
- BNUoj Carries 统计进位的次数(优化)
- Carries
- BNUOJ 弱校联萌十一大决战之强力热身B Carries(二分)
- SCU4437-Carries
- 【SCU】Carries
- Count The Carries
- [SCU4437]Carries[数学][二分]
- 国庆弱校 Carries
- SOJ 4437 Carries(二分)
- [SCU 4437 Carries] 二分
- scu oj 4437: Carries
- SCU 4437Carries(数论)
- 【思维】SCU 4437 Carries
- BNUOJ 1777
- BNUOJ 6242
- 四叉树 bnuoj
- BNUOJ 14519
- C++使用oracle的occi库操作oracle数据库
- Android滚轮时间选择控件(可扩展自定义)
- PullDownRefreshLayout 自定义Android下拉刷新。
- eMule中的kad相关代码梳理
- R语言编码规范(Google)
- BNUOJ-50393-Carries
- android学习记录 Onclick事件监听
- Objective-C 对象进阶:归档的概念和用法
- Light oj Trailing Zeroes (III) (二分查找)
- vps transmission
- 【模板】欧拉函数
- Python2.7.11安装matplotlib,numpy,scikit-learn等其他包,w7x86x64下无问题
- 深度学习-资料收纳集
- 【模板】归并排序