http://codeforces.com/problemset/problem/1195/D1
这四题目链接供大家参考,题目大致意思就是给你N个数,∑(i=1,i=N)∑(j=1,j=N)f(ai,aj).,而且题目里的数据保证了位数相同为p,pi == pj如果f(ai,aj) = ai1aj1ai2aj2…,这题的大致思路就是有规律的,就是求每个数的的每个数字对最后的那个数字的贡献度,比如说1234,他对最后那个数字的贡献度就是首先看4,4在1234作为前一个数字的时候要不就在最后一位或者倒数第二位(就是说在个位或十位),且存在了N次,以此类推3就在百位或千位,定义一个cnt记录百位或千位即可。
在此附上AC代码:
#include <iostream>
using namespace std;
typedef long long ll;
const int N = 1e5 + 5;
const int mod = 998244353;
ll a[N];
int n;
ll poww(ll a,ll b)
{
ll ret = 1;
while(b)
{
if(b&1)
{
ret = ret * a % mod;
}
a = a * a % mod;
b/=2;
}
return ret;
}
int main()
{
while(cin >> n)
{
ll res = 0;
for(int i = 1;i <= n;i++)
{
cin >> a[i];
ll temp = a[i];
int cnt = 0;
while(temp)
{
res = (res + temp % 10 * n % mod * poww(10,cnt)% mod)% mod;
cnt++;
res = (res + temp % 10 * n % mod * poww(10,cnt) % mod)%mod;
cnt++;
temp/=10;
}
}
cout << res << endl;
}
return 0;
}