一个小细节导致WA,但不知道为什么会这样子
查看原帖
一个小细节导致WA,但不知道为什么会这样子
602063
ginnnnnn楼主2022/2/13 18:20

AC代码:

#include <bits/stdc++.h>
using namespace std;
#define N 5000
typedef long long ll;
const ll MOD=1e9+7;
int main()
{
    ll a[N+5]={0},b[N+5]={0},n,x,m=0,ans=0;
    scanf("%lld",&n);
    for (int i=0;i<n;i++) scanf("%lld",&x),a[x]++,m=max(m,x);
    for (int i=2;i<=m;i++)
    {
        if (a[i]<2) continue;
        ll tmp=a[i]*(a[i]-1)/2%MOD;
        for(int j=1;j<=i/2;j++)
        {
            if (j!=i-j) ans+=tmp*a[j]*a[i-j];
            else if (a[j]>=2) ans+=tmp*a[j]*(a[j]-1)/2;
            ans%=MOD;
        }
    }
    printf("%lld\n",ans);
}

内层循环改成下面这样后会WA:

for(int j=1;j<i/2;j++)
    ans+=tmp*a[j]*a[i-j],ans%=MOD;
int j=i/2;
if (2*j==i&&a[j]>=2) ans+=tmp*a[j]*(a[j]-1)/2,ans%=MOD;

感觉应该是等价的,但下面的WA了,求助为什么

2022/2/13 18:20
加载中...