【GOJ 2961】数数

解析

我们要统计多少数字满足默契数的条件,其实就是看看在 (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;
}
原文地址:https://www.cnblogs.com/Sam2007/p/14322083.html