• 3679. 进制转换


    链接:Miku

    -------------------------------------

    看起来蛮简单的,就是一道模拟

    求出1-l到1-r,减一下

    数据范围?longlong走起

    kkkk

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int k,m;
    long long l,r;
    long long sum[100000];
    long long c,d;
    long long s;
    long long le=1;
    long long ans;
    long long a1,a2;
    int n;
    int main(){
        cin>>n;
        for(int j=1;j<=n;++j){
        scanf("%lld%lld%d%d",&l,&r,&k,&m);
        le=1;
        ans=0;
        for(int i=1;i<=m;++i){
            le*=k;
        }
        {
            long long a=l/le;
            long long b=a%k;
            a1=(a-b)/k*(k-1)+b;
        }
        {
            long long aa=r/le;
            long long bb=aa%k;
            a2=(aa-bb)/k*(k-1)+bb;
        }
        cout<<a2-a1<<endl;;
        }
        return 0;
    }
    wa

    ????????

    -------------------------------------

    一看输出,竟然有负数!!

    原来这个题根本没保证l<r

    好吧,特判

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int k,m;
    long long l,r;
    long long sum[100000];
    long long c,d;
    long long s;
    long long le=1;
    long long ans;
    long long a1,a2;
    int n;
    int main(){
        cin>>n;
        for(int j=1;j<=n;++j){
        scanf("%lld%lld%d%d",&l,&r,&k,&m);
        le=1;
        ans=0;
        for(int i=1;i<=m;++i){
            le*=k;
        }
        {
            long long a=l/le;
            long long b=a%k;
            a1=(a-b)/k*(k-1)+b;
        }
        {
            long long aa=r/le;
            long long bb=aa%k;
            a2=(aa-bb)/k*(k-1)+bb;
        }
        if(a2<a1)
        cout<<0<<endl;
        else
        cout<<a2-a1<<endl;
        }
        return 0;
    }
    梅开二度

    Wrong Answer

    What?一看,输出比样例少了1

    啥子情况呢?可能是l自己就符合要求,但是我这么写,会把l自己减去

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int k,m;
    long long l,r;
    long long sum[100000];
    long long c,d;
    long long s;
    long long le=1;
    long long ans;
    long long a1,a2;
    int n;
    int main(){
        cin>>n;
        for(int j=1;j<=n;++j){
        scanf("%lld%lld%d%d",&l,&r,&k,&m);
        le=1;
        l--;
        ans=0;
        for(int i=1;i<=m;++i){
            le*=k;
        }
        {
            
            long long a=l/le;
            long long b=a%k;
            a1=(a-b)/k*(k-1)+b;
        }
        {
            long long aa=r/le;
            long long bb=aa%k;
            a2=(aa-bb)/k*(k-1)+bb;
        }
        if(a2<a1)
        cout<<0<<endl;
        else
        cout<<a2-a1<<endl;
        }
        return 0;
    }
    梅开三度

    RE!!!!

    这是因为求le的时候用了大量的乘法,溢出了

    然而事实上,le唯一的用处就是做除数,那么可以把乘法变除法

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int k,m;
    long long l,r;
    long long sum[100000];
    long long c,d;
    long long s;
    long long le=1;
    long long ans;
    long long a1,a2;
    int n;
    int main(){
        cin>>n;
        for(int j=1;j<=n;++j){
        scanf("%lld%lld%d%d",&l,&r,&k,&m);
        le=1;
        l--;
        ans=0;
        for(int i=1;i<=m;++i)
        {
            l/=k;
            r/=k;
        }
    //    for(int i=1;i<=m;++i){
    //        le*=k;
    //    }
        {
            long long a=l;
            long long b=a%k;
            a1=(a-b)/k*(k-1)+b;
        }
        {
            long long aa=r;
            long long bb=aa%k;
            a2=(aa-bb)/k*(k-1)+bb;
        }
        if(a2<a1)
        cout<<0<<endl;
        else
        cout<<a2-a1<<endl;
        }
        return 0;
    }
    Ac
  • 相关阅读:
    企业云盘安全性如何 怎样部署
    Sentinel 控制台部署
    nginx代理静态页面添加二级目录
    java socket
    IDEA
    golang代码生成器
    es 单节点问题
    代码模板
    错误摘要 HTTP 错误 403.14
    安装.Net Framework 4.6.2无法安装的2种情况
  • 原文地址:https://www.cnblogs.com/For-Miku/p/13336740.html
Copyright © 2020-2023  润新知