题解 P2119 【魔法阵】

· · 题解

这道题是一个很好的数学题\

$O(n^4)$暴力枚举。\ $55$分\ 为神马不排序呢~~~ ------------ $100$分\ 利用数学方法来做\ 可以用桶先来排序\ 再进行枚举a,d。\ 代码~~~ ``` #include<bits/stdc++.h> using namespace std; int n,m; int a[15001],b[15001],c[15001],d[15001]; int x[40001],s[15001]; int sum=0; int main(){ cin>>n>>m; for(int i=1;i<=m;i++){ cin>>x[i]; s[x[i]]++;//桶 } for(int i=1;i*9<n;i++){ sum=0; for(int j=i*9+2;j<=n;j++){ sum+=s[j-9*i-1]*s[j-7*i-1]; d[j]+=sum*s[j-i]; c[j-i]+=sum*s[j];//d } sum=0; for(int j=n-i*9-1;j>=1;j--){ sum+=s[j+8*i+1]*s[j+9*i+1]; b[j+2*i]+=sum*s[j]; a[j]+=sum*s[j+2*i];//a } } for(int i=1;i<=m;i++){ cout<<a[x[i]]<<" "; cout<<b[x[i]]<<" "; cout<<c[x[i]]<<" "; cout<<d[x[i]]<<" ";//输出 cout<<endl; } return 0; } ``` 再见!