题目是
小辉得到了一个包含 n 个数的数列,他要从中选出两个不同位置的数形成一个数对,要求较左边的数对 k 取余的结果小于等于较右边的数对 k 取余的结果,问小辉有多少种选法。
输入
一行,两个正整数 n 和 k。 接着 n 个正整数,为数列的值。
输出
一行,一个正整数,表示答案。
样例输入
4 6
3 4 5 6
样例输出
3
代码是
#include<bits/stdc++.h>
using namespace std;
long long n,m,a[1000005],b[1000005],maxx=-1,ans=0;
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++)
{
cin>>a[i];
a[i]=a[i]%m;
maxx=max(maxx,a[i]);
}
for(int i=n;i>=1;i--)
{
for(int j=a[i];j<=maxx;j++)
ans+=b[j];
b[a[i]]++;
}
cout<<ans;
return 0;
}
我有两个问题:
1、为什么下面的外层循环要倒序
2、代码答案为什么不包含有0的
求大佬解答