首页 > 其他 > 详细

关于11.1 ZUST校CCCC选拔赛(L1部分)题目的思路1(自我学习记录用)

时间:2020-11-07 10:31:02      阅读:28      评论:0      收藏:0      [点我收藏+]

技术分享图片

思路:看到题目想到暴力枚举,但是不能盲目,因为一看数据必超时
我们可以换一个思路来枚举,例如:
如果n=12345时候,从哪个地方开始枚举?
假设最坏情况,就是每位都是9,那就是从12345-5*9=12300开始枚举
这样复杂度大大减小
最后说一下,不要忘记加上关闭缓冲区语句,否则会超时

#include <bits/stdc++.h>
using namespace std;
int main(){
    ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);//关闭缓冲区
    long long n; cin>>n;
    long long k=1;
    int ws=0;//记录n的位数
    while(1){
        if(k<=n&&n<k*10){
            ws++;
            break;
        }else{
            k*=10;
            ws++;
        }
    }
    int cnt=0;
    for(long long i=n-9*ws;i<n;i++){
        long long sum=0;
        long long tmp=i;
        long long tmpk=k;
        while(tmpk!=0){//计算各位数和
            int p; p=tmp/tmpk;
            tmp%=tmpk; tmpk/=10;
            sum+=p;
        }
        sum+=i;
        if(sum==n)cnt++;
    }
    cout<<cnt;
    return 0;
}

关于11.1 ZUST校CCCC选拔赛(L1部分)题目的思路1(自我学习记录用)

原文:https://www.cnblogs.com/JYF-AC/p/13939608.html

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