求助

P3799 小 Y 拼木棒

@[tyy6034](/user/917842) 看一下我改的好吧,没时间问答了 ```cpp #include<iostream> using namespace std; typedef long long ll; const ll k=1000000007; ll n,ma,a[500005],cnt=0; ll c(ll x){ return x*(x-1)/2; } int main() { cin>>n; for(int i=1;i<=n;i++) { ll x; cin>>x; ma = max(ma,x); a[x]++; } for(int i=1;i<=ma;i++) { if(a[i]>=2) { ll x=c(a[i])%k; for(int j=1;j<=i/2;j++) { if(i==j*2)cnt+=(c(a[j])*x)%k; else cnt+=(a[j]*a[i-j])%k*x%k; } } } cout<<cnt<<endl; return 0; } ```
by QAQQWQ0v0 @ 2023-11-11 19:57:16


@[QAQQWQ0v0](/user/579699) 为什么我这里只对了3个?
by tyy6034 @ 2023-11-11 20:00:27


@[tyy6034](/user/917842) 搞错了,是这个 ```cpp #include<iostream> using namespace std; typedef long long ll; const ll k=1000000007; ll n,ma,a[500005],cnt=0; ll c(ll x){ return x*(x-1)/2; } int main() { cin>>n; for(int i=1;i<=n;i++) { ll x; cin>>x; ma = max(ma,x); a[x]++; } for(int i=1;i<=ma;i++) { if(a[i]>=2) { ll x=c(a[i])%k; for(int j=1;j<=i/2;j++) { if(i==j*2)(cnt+=(c(a[j])*x)%k)%=k; else (cnt+=(a[j]*a[i-j])%k*x%k)%=k; } } } cout<<cnt<<endl; return 0; } ```
by QAQQWQ0v0 @ 2023-11-11 21:42:16


|