关于 ABC353 D 以及 atcoder mint
  • 板块学术版
  • 楼主Dtw_
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/5/14 21:59
  • 上次更新2024/5/15 13:24:42
查看原帖
关于 ABC353 D 以及 atcoder mint
938933
Dtw_楼主2024/5/14 21:59

就是我不用 atcoder mint 写出来是这个样子

#include<bits/stdc++.h>

using namespace std;

#define int long long

const int P = 998244353;
const int N = 1e6 + 10;

int n;
int a[N];
int d[N];
int t[N];

signed main()
{
	cin >> n;
	for(int i=1; i<=n; i++)
	{
		cin >> a[i];
		d[to_string(a[i]).size()]++;
	}
	t[0] = 1;
	for(int i=1; i<=10; i++)
	{
		t[i] = t[i-1] * 10 % P;
	}
	int res = 0;
	for(int i=1; i<=n; i++)
	{
		res += a[i] * (i - 1);
		d[to_string(a[i]).size()]--;
		for(int j=1; j<=10; j++)
		{
			res += a[i] * t[j] * d[j];
		}
		res %= P;
	}
	cout << res;
	return 0;
}

但是他 wa 了 1818 个点。

这是用了 atcoder mint 的

#include<bits/stdc++.h>
#include "atcoder/modint"

using namespace std;

using mint = atcoder::modint998244353;

#define int long long

const int P = 998244353;

const int N = 1e6 + 10;

int n;
int a[N];
int d[N];
mint t[N];

signed main()
{
	cin >> n;
	for(int i=1; i<=n; i++)
	{
		cin >> a[i];
		d[to_string(a[i]).size()]++;
	}
	t[0] = 1;
	for(int i=1; i<=10; i++)
	{
		t[i] = t[i-1] * 10;
	}
	mint res = 0;
	for(int i=1; i<=n; i++)
	{
		res += a[i] * (i - 1);
		d[to_string(a[i]).size()]--;
		for(int j=1; j<=10; j++)
		{
			res += a[i] * t[j] * d[j];
		}
	}
	cout << res.val();
	return 0;
}

然后就对了。

  1. 求查第一份代码的错
  2. 求 atcoder mint 的原理,逻辑
2024/5/14 21:59
加载中...