因为数据范围在1~10000,所以这道题的话直接暴力打表就可以,开一个结构体,全存起来。
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
#define MAXD 10000 + 10
struct State{
int array[10];
}st[MAXD];
void biao(){
memset(st[1].array,0,sizeof(st[1].array));
st[1].array[1] = 1;
for(int i = 2; i <= MAXD - 10; i++){
memcpy(st[i].array,st[i-1].array,sizeof(st[i].array));
int n = i;
while(n){
st[i].array[n % 10]++;
n /= 10;
}
}
return ;
}
int main(){
biao();
int T;
scanf("%d",&T);
while(T--){
int n;
scanf("%d",&n);
for(int i = 0 ; i < 10 ; i++){
printf("%d",st[n].array[i]);
if(i < 9)
printf(" ");
}
printf("\n");
}
return 0;
}
本文介绍了一种适用于数据范围在1到10000之间的暴力打表算法实现方案,通过预先计算并存储所有可能的状态来快速响应查询请求。文章详细展示了如何使用C++结构体数组保存状态,并通过迭代更新每个状态,最终实现高效的数据查询。

被折叠的 条评论
为什么被折叠?



