首先以为做出来了,TLE 48。然后在比赛结束后,观看了所有大佬们讨论的帖子,完全没看懂。是不是可以似了?
#include<iostream>
#define ls(p) p << 1
#define rs(p) p << 1 | 1
#define mid ((pl + pr) >> 1)
using namespace std;
const int MAXN = 2e5 + 7;
long long a[MAXN];
int main()
{
int n, m;
cin>>n>>m;
for(int i = 1; i <= n; i++) cin>>a[i], a[i] += a[i - 1]; //cout<<a[i]<<" ";
int ans = 0;
for(int i = 1; i <= n - 1; i++)
{
for(int j = i; j <= n - 1; j++) // 对,这个蒟蒻还以为优化成了 O(n log n) QAQ,一推就发现只是除了一个常数 2,还是 O(n^2) 的级别
{
long long num1 = a[j] - a[i - 1];
long long num2 = a[n] - a[j] + a[i - 1];
//cout<<"i = "<<i<<" j = "<<j + 1<<" num1 = "<<num1<<" num2 = "<<num2<<endl;
if(num1 % m == 0) ans += 1; //cout<<" num1: i = "<<i<<" j = "<<j + 1<<endl;
if(num2 % m == 0) ans += 1; //cout<<" num2: i = "<<j + 1<<" j = "<<i<<endl;
}
}
cout<<ans;
return 0;
}
若您有时间,同时有耐心给这个蒟蒻讲懂的话,万分感谢!
(我应该没违规吧)