7 条题解

  • 3
    @ 2023-12-3 14:47:09
    #include <bits/stdc++.h>
    using namespace std;
    long long n,l,r,a[1000005];
    int s1(int x)
    {
        int sum=0;
        while(x>0)
        {
            if(x%10==1)
            {
                sum++;
            }
            x/=10;
        }
        return sum;
    }
    int main()
    {
        a[1]=1;
        for(int i=2;i<=1000000;i++)
        {
            a[i]=a[i-1]+s1(i);
        }
        cin >>n;
        for(int q=1;q<=n;q++)
        {
            cin>>l>>r;
            cout <<a[r]-a[l-1]<<endl;
        }
    }
    
    • 2
      @ 2021-8-13 10:31:47

      请注意:不要在 8 月 14日 10:30 之前发布本题任何形式的题解,否则你的题解可能会被删除!

    • 1
      @ 2022-8-6 20:56:30

      纯粹前缀和的题
      总耗时1066ms
      峰值内存18.5 MiB

      const int maxn=1e6+1; // 数据上限
      int n,l,r,sum[maxn],x,cnt;
      
      
      ios::sync_with_stdio(false); // 输入输出加速
      cin.tie(0);
      cout.tie(0);
      for(int i=1;i<=maxn;i++){ // 用前缀和打表
          x=i; // 计算第i个数有几个1
          cnt=0; // 记录
          while(x>0){ // 计算每一位
              if(x%10==1)cnt++; // 每当遇到1则cnt+1
              x/=10; // 去除个位
          }
          sum[i]=sum[i-1]+cnt; // 计算前缀和
      }
      for(int i=1;i<=n;i++){
          cin>>l>>r;
          cout<<sum[r]-sum[l-1]<<"\n"; // 直接通过前缀和计算答案。杜绝TLE,从你我做起=)
      }
      

      兄弟,别想着直接搬运了,该写的地方还是得自己写的()
      我保证你直接搬运直接CE/doge

      • -1
        @ 2023-10-15 22:50:27

        这题使用前缀和。

        我们定义一个函数count1计算一个数里有多少个1,先用sum[i]记录1~i中有多少个1,再在输入时直接输出即可。

        unAC code

        int count1(int n)
        {
            int sum=0;
            while(n>0)
            {
                if(n%10==1)
                {
                    sum++;
                }
                n/=10;
            }
            return sum;
        }
        
        int main()
        {
            for(int i=1;i<=1000000;i++)
            {
                sum[i]=sum[i-1]+count1(i);
            }
            cin>>n;
            while(n--)
            {
                cin>>l>>r;
                cout<<sum[r]-sum[l-1]<<endl;
            }
            return 1145141919810;
        }
        

        复制CE,拿走不谢~

        • -1
          @ 2023-10-5 18:16:27

          image

          • -1
            @ 2021-8-18 12:43:11

            首先从1到100w遍历一遍,看每一个数字中1的数量,然后用一个前缀和数组来记录,在求的时候直接用前缀和数组求出l到r之间数字1的个数即可,别忘了开输入输出的优化。

            另外在输出换行时,可以用"\n"来代替endl,这样可以大大减少输出的时间。

            具体代码见下方千夜老师代码↓↓

            • -10
              @ 2022-4-24 16:55:24

              写题解请注意

              鼓励大家写题解,但注意题解格式。

              题解一定要有思路解析或代码注释,能否让别人理解你的思路

              也是你的能力的检验,不要只放无意义的代码给大家复制,那就失去了做题的初心。

              给代码两端加上这个会舒服一些

              ```cpp

              你的代码

              ```

              </span>

              这个点在键盘的左上角tab上面那个键,注意切换输入法

              #include<iostream>
              using namespace std;
              int main()
              {
                  int n;
                  cin>>n;//这是一个注释
                  return 0;
              } 
              

              请注意严禁抄袭题解,写题解不要只放代码,需加上你的思路或代码注释。

              抄袭题解一经发现直接取消成绩。

              题解被删除的可能

              1. 代码不符合格式规范
              2. 没有思路讲解或者没有注释,
              3. 无意义的题解

              大家携手共同维护一个良好的编程环境,如果一经发现,多次作乱。可能会被管理员拉黑,请注意,一旦拉黑即失去登陆资格。

              • 1

              信息

              ID
              1210
              时间
              1000ms
              内存
              256MiB
              难度
              6
              标签
              递交数
              735
              已通过
              220
              上传者