解答贴,求指点
查看原帖
解答贴,求指点
1366067
wei_learn_city楼主2024/10/19 13:45

我想问一下为什么把a[i]-1+'1' 改成 a[i]-'0'就wa了

[CoE R5] 暴龙的白菜

题目背景

暴龙爱吃白菜。

题目描述

给定一个字符串,由 111\texttt{1}222\texttt{2}333\texttt{3}444\texttt{4}555\texttt{5}666\texttt{6}777\texttt{7}888\texttt{8}999\texttt{9}101010\texttt{10}……以此类推,依次拼接而成。

询问字符串第 ll 位到第 rr 位的数字之和。

输入格式

输入包含多组测试数据。

第一行一个正整数 TT

接下来 TT 组问询,每次两个正整数 l,rl,r

输出格式

TT 行,每行一个整数代表答案。

样例 #1

样例输入 #1

4
5 9
46 50
114 514
19 19810

样例输出 #1

18
3
1134
74924

提示

样例解释

字符串为:

12233344445555566666677777778888888899999999910101010101010101010\texttt{12233344445555566666677777778888888899999999910101010101010101010}\cdots\cdots

对于第一组询问,第 55 位到第 99 位的数字之和为 3+3+4+4+4=183+3+4+4+4=18

对于第二组询问,第 4646 位到第 5050 位的数字之和为 1+0+1+0+1=31 + 0 + 1 + 0 + 1 = 3


数据范围

本题采用捆绑测试。

  • Subtask 1(10 pts):T=1\texttt{Subtask 1(10 pts):}T=11lr101\le l\le r\le 10
  • Subtask 2(20 pts):1T10\texttt{Subtask 2(20 pts):}1\le T\le 101lr1031\le l\le r\le 10^3
  • Subtask 3(30 pts):1T103\texttt{Subtask 3(30 pts):}1\le T\le 10^31lr1051\le l\le r\le 10^5
  • Subtask 4(40 pts):\texttt{Subtask 4(40 pts):}无特殊限制。

对于 100%100\% 的数据,满足 1T1051\le T\le 10^51lr1061\le l\le r\le 10^6

#include<bits/stdc++.h>
using namespace std;
int q[1000005];
int main()
{
    int t,l,r;
    cin>>t;
    
        string a;
        for(int i=1;i<=1000;i++)
        {
            for(int j=1;j<=i;j++)
            {
                if(i<10) a+=char(i-1+'1');
                else if(i<100) a+=char(i/10-1+'1'),a+=char(i%10-1+'1');
                else if(i<1000) a+=char(i/100-1+'1'),a+=char(i/10%10-1+'1'),a+=char(i%10-1+'1');
            }
        }
        q[0]=a[0]-'0';
        for(int i=1;i<1000004;i++)
        {
            q[i]=q[i-1]+a[i]-'0';
        }
        for(int i=0;i<t;i++)
        {
            cin>>l>>r;
            cout<<q[r-1]-q[l-2]<<endl;
        } 
}
2024/10/19 13:45
加载中...