题解 | #九九八十一#
九九八十一
https://ac.nowcoder.com/acm/contest/58604/A
非常简单的一道题,一开始想出数位dp来着,后来发现数位dp处理乘法的字符数不好搞,干脆降低数据范围做一个签到题。主要是注意*,=这三个字符就行,剩下的直接暴力去循环乘法表统计字符。由于备注说答案一定大于1并且不是回车,这就排除了'\n'和文件结束符的会有歧义的情况。
#include<cstdio>
using namespace std;
int n;
char m;int qwq;
int ans;
int cal(int q) {
int cnt=0;
if(q==0) {return qwq==0;}
while(q) {
int now=q%10;
q/=10;
if(now==qwq) cnt++;
}
return cnt;
}
int main() {
scanf("%c",&m);
scanf("%d",&n);
if(m==','){printf("%d",n*(n+1)/2);return 0;}
if(m=='='){printf("%d",n*(n+1)/2);return 0;}
if(m=='*'){printf("%d",n*(n+1)/2);return 0;}
qwq=m-'0';
for(int i=1;i<=n;i++)
for(int j=1;j<=i;j++) {
ans=ans+cal(i)+cal(j)+cal(i*j);
}
printf("%d",ans);return 0;
}