题目大意:一个湖边有N个亭子,编号分别为1~N,从第i个亭子走到第i+1个亭子需要用a[i]秒(当i=N,i+1=1),每次只能从第i个亭子走到第i+1个亭子,现在问你从某个亭子走到另一个亭子中秒数是M的倍数的走法有几种。
我的0分代码(16点AC,48点TLE):
#include <bits/stdc++.h>
using namespace std;
#define int long long
int n, m, a[200001], sum;
signed main()
{
cin >> n >> m;
for (int i = 1; i <= n; i++)
cin >> a[i];
for (int i = 2; i <= n; i++)
a[i] += a[i - 1];
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
{
if (i == j)continue;
if (i < j)
{
if ((a[j - 1] - a[i - 1]) % m == 0)
{
sum++;
}
}
else
{
if ((a[n] - a[i - 1] + a[j - 1]) % m == 0)
{
sum++;
}
}
}
}
cout << sum;
return 0;
}
求优化