解析
我们要统计多少数字满足默契数的条件,其实就是看看在 (1) ~ (n) 中有多少组数字首尾相互想等。
把每个数字的最高位和最低位存进 (dp_{i,j}),然后遍历即可。
详情看代码。
代码
#include<bits/stdc++.h>
using namespace std;
int dp[15][15];
int main() {
int n;
scanf("%d",&n);
for(int i=1; i<=n; i++) {
int x=i%10,y=i;
while(y>9) {
y/=10;
}
dp[x][y]++;
}
long long ans=0;
for(int i=0; i<10 ;i++) {
for(int j=0; j<10; j++) {
ans+=dp[i][j]*dp[j][i];
}
}
printf("%lld",ans);
return 0;
}