题解 | #数圈圈#
数圈圈
https://ac.nowcoder.com/acm/problem/14556
这个圈圈竟然是数字的圈,离大谱,本蒟蒻看样例看到怀疑人生QAQ,究极折磨。
emm,思路就是先遍历一下1~1e6,每个数的圈圈求一下,用一个数组保存,再用前缀和处理。
#include<iostream>
using namespace std;
int a, b, n, m, l, r, ans, sum;
int arr[2000000]; int s[2000000];
int main()
{
cin >> n;
for (int i = 1; i <= 1e6; i++)
{
int x = i;
while (x > 0)
{
if (x % 10 ==4||x%10==6||x%10==9||x%10==0)//有一个圈
{
arr[i]++;
}
else if (x % 10 ==8)//8有两个圈
{
arr[i] += 2;
}
x /= 10;
}
}
for (int i = 1; i <= 1e6; i++)
{
s[i] = arr[i] + s[i - 1];//前缀和
}
while (n--)
{
cin >> a >> b;
cout << s[b] - s[a - 1] << endl;
}
#
return 0;
}
第一篇题解,完结撒花!!!