1608: nc与加法进位

Time Limit: 2000 MS  Memory Limit: 128 MB
Submit: 29  Solved: 27
[Submit][Status][Web Board]

Description

nc最近很无聊~所以他总是想各种有趣的问题来打发时间。
nc喜欢做加法运算,他对加法进位很感兴趣。现在给你n个数字,他想知道,这些数字两两相加,一共会出现多少次加法进位。

Input

第一行包含1个整数n,表示有n个数字。(n<=5000)
第二行包含n个数字,分别表示a1,a2,...an。(0 ≤ai ≤ 10^9).

Output

这些数字两两相加,出现加法进位次数。

Sample Input

3
43 58 85

Sample Output

5

HINT

 

Source

[Submit][Status][Web Board]

题目链接:

  http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1608

题目大意:

  题目给出N个数,问这些数两两相加共会出现几次加法进位。

题目思路:

  【二分】

  N最大5000,其实这题直接拿高精度加法统计就能过,而且0ms,数据不算很强。

  NlogN的做法N可以达到10W。

  首先可以假设这N个数位数都相同(不足补0)

  枚举每一位(k=1~8),对于当前的这一位,将N个数按照当前这一位上数字从小到大排序。

  再枚举每个数,假设第i个数在第k位为x,则二分其余N-1个数这一位>=10-x的个数,加到答案上。

  (针对每一位去统计进位次数)

  这样时间复杂度降到NlogN。

  

  1. /****************************************************
  2.  
  3. Author : Coolxxx
  4. Copyright 2017 by Coolxxx. All rights reserved.
  5. BLOG : http://blog.csdn.net/u010568270
  6.  
  7. ****************************************************/
  8. #include<bits/stdc++.h>
  9. #pragma comment(linker,"/STACK:1024000000,1024000000")
  10. #define abs(a) ((a)>0?(a):(-(a)))
  11. #define lowbit(a) (a&(-a))
  12. #define sqr(a) ((a)*(a))
  13. #define mem(a,b) memset(a,b,sizeof(a))
  14. const double EPS=1e-;
  15. const int J=;
  16. const int MOD=;
  17. const int MAX=0x7f7f7f7f;
  18. const double PI=3.14159265358979323;
  19. const int N=;
  20. const int M=;
  21. using namespace std;
  22. typedef long long LL;
  23. double anss;
  24. LL aans;
  25. int cas,cass;
  26. int n,m,lll,ans;
  27. int e[]={,,,,,,,,,};
  28. int a[N],b[N];
  29. int main()
  30. {
  31. #ifndef ONLINE_JUDGE
  32. freopen("1.txt","r",stdin);
  33. // freopen("2.txt","w",stdout);
  34. #endif
  35. int i,j,k;
  36. int x,y,z;
  37. // for(scanf("%d",&cass);cass;cass--)
  38. // for(scanf("%d",&cas),cass=1;cass<=cas;cass++)
  39. // while(~scanf("%s",s))
  40. while(~scanf("%d",&n))
  41. {
  42. for(i=;i<=n;i++)
  43. scanf("%d",&a[i]);
  44. for(k=;k<;k++)
  45. {
  46. for(i=;i<=n;i++)
  47. b[i]=a[i]%e[k];
  48. sort(b+,b++n);
  49. for(i=;i<=n;i++)
  50. {
  51. int l,r,mid;
  52. l=i+,r=n;
  53. while(l<=r)
  54. {
  55. mid=(l+r+)/;
  56. if(b[mid]+b[i]<e[k])l=mid+;
  57. else r=mid-;
  58. }
  59. aans+=n-r;
  60. }
  61. }
  62. printf("%lld\n",aans);
  63. }
  64. return ;
  65. }
  66. /*
  67. //
  68.  
  69. //
  70. */

XMU 1608 nc与加法进位 【二分】的更多相关文章

  1. fpga加法进位链实现过程中的一个特点

    altera fpga 用quartus综合后会出现加法进位链一正一反的情况,所谓一正一反指的是假设某一级输入为a,b,进位值为c,则该级进位链逻辑应该为cout=ab+ac+bc,但实际为 cout ...

  2. XMU 1605 nc与数列 【动态规划】

    1605: nc与数列 Time Limit: 2000 MS  Memory Limit: 64 MBSubmit: 84  Solved: 13[Submit][Status][Web Board ...

  3. XMU 1607 nc与点对距离 【线段树】

    1607: nc与点对距离 Time Limit: 5000 MS  Memory Limit: 512 MBSubmit: 60  Solved: 8[Submit][Status][Web Boa ...

  4. XMU 1606 nc与滴水问题 【模拟】

    1606: nc与滴水问题 Time Limit: 1000 MS  Memory Limit: 64 MBSubmit: 85  Solved: 27[Submit][Status][Web Boa ...

  5. BZOJ5321 JXOI2017加法(二分答案+贪心+堆+树状数组)

    二分答案后得到每个位置需要被加的次数.考虑贪心.从左到右考虑每个位置,将以该位置为左端点的区间按右端点从大到小加进堆.看该位置还需要被加多少次,如果不需要加了就不管,否则取堆顶区间将其选择,BIT实现 ...

  6. PIC单片机状态寄存器中的C(进位/借位位标志)

    查阅PIC单片机芯片手册,关于进位/借位位的说明为: C:进位/借位位. 1 = 结果的最高位发生了进位 0 = 结果的最高位未发生进位 同时有一条标注:借位的极性是相反的. 通过以上说明,可以将C的 ...

  7. P1601高精度加法

    传送门 虽然本题一本通上有,但是一本通不是万能的,这道题就漏掉了进位(所以这告诉我们加法进位很重要) 直接上修改后的题解 #include<iostream> #include<cs ...

  8. zzulioj - 2624: 小H的奇怪加法

    题目链接:http://acm.zzuli.edu.cn/problem.php?id=2624 题目描述 小H非常喜欢研究算法,尤其是各种加法.没错加法包含很多种,例如二进制中的全加,半加等.全加: ...

  9. POJ 1905 题解(二分+几何)

    题面 传送门 分析 如图:已知AB=L,弧AB=L(1+nC)" role="presentation" style="position: relative;& ...

随机推荐

  1. BeautifulSoup4系列一

    前言 以博客园为例,爬取我的博客上首页的发布时间.标题.摘要,本篇先小试牛刀,先了解下它的强大之处,后面讲beautifulsoup4的详细功能. 一.安装 1.打开cmd用pip在线安装beauti ...

  2. 线性回归Linear regression

    线性回归算法 解决回归问题 思想简单,容易实现 是许多强大的非线性模型的基础 结果具有很好的可解释性 蕴含机器学习中的很多重要思想 基本思想:寻找一条直线,最大程度的“拟合”样本特征和样本输出标记之间 ...

  3. POJ 1724 二维费用最短路

    题目大意:有N个城市,编号1-N有R条路,每条路(单向)的起点为Si,终点为Di,长度为Li,如果要走这条路需要花Ti的钱现在你只有K元钱,求在不超支的前提下,从1走到N需要的最短距离 这里总是希望路 ...

  4. [luoguP3258] [JLOI2014]松鼠的新家(lca + 树上差分)

    传送门 需要把一条路径上除了终点外的所有数都 + 1, 比如,给路径 s - t 上的权值 + 1,可以先求 x = lca(s,t) 类似数列上差分的思路,可以给 s 和 f[t] 的权值 + 1, ...

  5. @Temporal()注解的使用

    数据库的字段类型有date.time.datetime而Temporal注解的作用就是帮Java的Date类型进行格式化,一共有三种注解值: 第一种:@Temporal(TemporalType.DA ...

  6. 尽量写出大家都能看懂的ReactJS入门教程

    个人感觉ReactJS相比于传统的JS框架还是挺有意思的,主要是它将JS代码和HTML代码完美的结合在了一起,有点jsp把java代码和html混在一起写的意思?但是它通过组件的形式实现了代码可复用, ...

  7. 【BZOJ3626】LCA(树上差分,树链剖分)

    题意:给出一个n个节点的有根树(编号为0到n-1,根节点为0).一个点的深度定义为这个节点到根的距离+1.设dep[i]表示点i的深度,LCA(i,j)表示i与j的最近公共祖先.有q次询问,每次询问给 ...

  8. 积累js中的一些问题及解决方案

    一.取字符串的第i位不兼容的问题 1.问题:对于字符串str来说,要获取第i位,常见的是str[i],但是在低版本的浏览器中不兼容,例如ie7. 2.解决:使用str.charAt(i); 二.使用定 ...

  9. msp430入门编程24

    msp430中C语言的扩展--段的使用 msp430入门学习 msp430入门编程

  10. Java学习--反码 原码 补码简析

    关于课上实验中对小数的处理中出现的问题涉及到原码,反码,补码的问题,所以在网上进行了一下搜索.在原码,反码,补码中的解释可得知,无论是哪一种码,能够表示的数的范围是-2^(位数-1)+1至2^(位数- ...