40分晋级球住!
查看原帖
40分晋级球住!
494699
卷王慢即快楼主2022/11/20 18:51

怎么搞的就40pts

#include <bits/stdc++.h>
using namespace std;
#define mod 1000000007
typedef long long ll;
int n;
int a[500001];
int b[500001];
ll sum1[500001], sum2[500001];
ll orz1[500001], orz2[500001];
ll total[500001];
ll ans = 0;
int main()
{
    speed: std::ios::sync_with_stdio(0);
    cin.tie(0); cout.tie(0);
	cin >> n;
	for(int i = 1; i <= n; i++)
	{
		cin >> a[i];
		sum1[i] = (sum1[i - 1] + a[i]) % mod;
	}
	for(int i = 1; i <= n; i++)
	{
		cin >> b[i];
		sum2[i] = (sum2[i - 1] + b[i]) % mod;
	}
	for(int i = 1; i <= n; i++)
	{
		orz1[i] = (orz1[i - 1] + sum1[i]) % mod;
		orz2[i] = (orz2[i - 1] + sum2[i]) % mod;
		total[i] = (total[i - 1] + sum1[i] * sum2[i] % mod) % mod;
	}
	for(int i = 1; i <= n; i++)
	{
		ll a, b, c, d;
		a = (total[n] - total[i - 1] + mod) % mod;
		b = (sum1[i - 1] * (orz2[n] - orz2[i - 1] + mod) % mod) % mod;
		c = (sum2[i - 1] * (orz1[n] - orz1[i - 1] + mod) % mod) % mod;
		d = ((n - i + 1) * (sum1[i - 1] * sum2[i - 1]) % mod) % mod;
		ans = (ans + a - b - c + d + mod) % mod;
	}
	cout << ans;
	return 0;
}

就前四个AC了。。。

2022/11/20 18:51
加载中...