zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    块结构在文件中的表示IOB【转载】
    LSTM输入层、隐含层及输出层参数理解【转载】
    L3-002 特殊堆栈 (30 分) 模拟stl
    L1-006 连续因子 (20 分) 模拟
    L2-014 列车调度 (25 分)
    L3-021 神坛 (30 分) 计算几何
    P1156 垃圾陷阱 DP
    P1063 能量项链 区间dp
    P1040 加分二叉树 区间dp
    P1605 迷宫 dfs回溯法
  • 原文地址:https://www.cnblogs.com/For-Miku/p/13336740.html
Copyright © 2011-2022 走看看