首页 > 其他 > 详细

位数差(二分)

时间:2020-02-20 11:59:19      阅读:51      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

 技术分享图片

 

 AC_Code

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 const int maxn = 1e5+5;
 5 const int inf=0x3f3f3f3f;
 6 #define rep(i,first,last) for(int i=first;i<=last;i++)
 7 #define dep(i,first,last) for(int i=first;i>=last;i--)
 8 
 9 int a[maxn];
10 int bit(int x){
11     int ans=0;
12     if( x==0 ) return 1;
13     while(x){
14         ans++;
15         x/=10;
16     }
17     return ans;
18 }
19 bool cmp(int x, int y){ return x>y; }
20 
21 int main()
22 {
23     int n;
24     scanf("%d",&n);
25     ll ans=0;
26     rep(i,1,n){
27         scanf("%d",&a[i]);
28         ans-=(n-i)*bit(a[i]);
29     }
30     sort(a+1,a+1+n,cmp);
31     rep(i,1,n-1){
32         int l=i+1,r=n;
33         ll now=bit(a[i]);
34         while( l<=r ){
35             int mid=(l+r)>>1;
36             if( bit(a[i]+a[mid])>now ) l=mid+1;
37             else r=mid-1;
38         }
39         ans += (r-i)*(now+1)+(n-r)*now;
40     }
41     printf("%lld\n",ans);
42     return 0;
43 }

 

位数差(二分)

原文:https://www.cnblogs.com/wsy107316/p/12334575.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!