把前n(n<=10000)个整数按顺序写在一起:123456789101112---数一数0~9各出现多少次(输出10个整数,分别是0,1,...,9出现的次数)。
#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
int k;
cin>>k;
vector<string>arr(k+1);
for(int i=1;i<=k;i++){
cin>>arr[i];
}
int ans[k+1][10]={0};
for(int i=1;i<=k;i++){
map<int,int>m;
for(auto x:arr[i]){
m[x-'0']++;
}
for(int j=0;j<10;j++){
ans[i][j]=ans[i-1][j];
}
for(auto y:m){
ans[i][y.first]=y.second;
}
}
int n;
cin>>n;
for(auto x:ans[n]){
cout<<x<<" ";
}
cout<<endl;
return 0;
}
用一个二维矩阵C[n][k]表示前n个数字写在一起k总共出现多少次,总共出现的次数就是C[n+1][k]=C[n][k]+x,其中x为k这个数字在第n+1个数种出现的次数。
这里又用到了map的遍历,auto x:m中x为一个pair类型:{键,值}。