码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces Round #513 by Barcelona Bootcamp (rated, Div. 1 + Div. 2)

时间:2018-10-20 22:17:40      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:string   难度   tip   return   数据   题目   std   cst   int   

Codeforces Round #513 by Barcelona Bootcamp (rated, Div. 1 + Div. 2)

  • Solved : 2 out of 8...
  • Rank : 2730 unrated
  • A. Phone Numbers
  • 难度:普及组。
  • 模拟即可。。
  • Summary : 简单题不要浪费过多时间,要提高做题的精度。
  #include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
using namespace std;
const int N = 100 + 10;
int cnt =0;
int main(){
    int n; scanf("%d", &n);
    for(int i=1;i<=n;i++) {
        char ch;
        cin>>ch;
        if(ch == ‘8‘) cnt++;
    }
    int ans=0;
    while(n){
        if(cnt&&n>=11) cnt--,n-=11,ans++;
        else break;
    }
    printf("%d",ans);
    return 0;
}
  • B. Maximum Sum of Digits
  • 难度: 提高组D1T1?
  • 贪心
    • 对于小于10的数字,a = n, b = 0
    • 对于大于10的数字,我们选择用尽量多的⑨去凑a直到再凑a就会大于n,然后a的最高位就是n的最高位-1,这样就构造出a了。
    • 然后b = n - a。
    • Tips:
      • pow()函数什么的。。。还是自己写个long long的快速幂吧。。。
      • 样例感人。。。还好打了个表找了找规律。。。
    • Summary :
      • 结论题 or 贪心题 一定要打个表写对拍检查一下结论的正确性。
      • 为防止中间量爆long long的情况,在大数据的题目中,能开long long尽量开long long。
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
long long cal(long long a){
    long long ans=0;
    while(a){
        long long dig=a%10;
        ans+=dig;
        a/=10;
    }
    return ans;
}
long long fpow(long long a,long long b){
    long long ans=1;
    for(;b;b>>=1){
        if(b&1) ans*=a;
        a*=a;
    }
    return ans;
}
int main(){
    long long n; scanf("%I64d", &n);
    long long ans;
    long long a ;
    if(n<10) a= n;
    else {
        a = 0;long long cnt=0;
        while(a<=n) a=a*10+9,cnt++;
        if(a>n) a/=10,cnt--;
        long long top;long long x=n;
        while(x){
            if(x/10>0)top=x/10;
            x/=10;
        }
        top--;
        long long pw=fpow(10,cnt);
        a=(long long)top*pw+a;
    }
    long long b ;
    if(n<10) b=0;
    else {
        b = n-a;
    }
    ans = cal(a) + cal(b);
    printf("%I64d",ans);
    return 0;
}

Codeforces Round #513 by Barcelona Bootcamp (rated, Div. 1 + Div. 2)

标签:string   难度   tip   return   数据   题目   std   cst   int   

原文地址:https://www.cnblogs.com/Loi-Brilliant/p/9822975.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!