【正经题解】魔法阵
2024-02-23 11:06:32
发布于:浙江
6阅读
0回复
0点赞
易知 、 距离为 、 距离 、 距离为 因此外层枚举 然后枚举 的位置这样的话 就固 定了而 、 有又是互相固定的 、 之间距离又需要大于 不能小于 所以可知 的最小位置,此时 、 只有一种选择,随着 、 的向右移动, 、 也可以向右移,同时之前的选择也是可以的,所以用 累加 、 的选择,从而推出做 、 的选择
做 、 的选择也类似
#include <iostream>
using namespace std;
int a[40050];
int ans[15050][10];
int t[15050];
int main() {
int n,m;
cin>>n>>m;
for(int i=1;i<=m;i++){
cin>>a[i];
t[a[i]]++;
}
for(int i=1;i<=(n-2)/9;i++){
int sum=0,x=9*i+1;
for(int xd=9*i+2;xd<=n;xd++){
int xc=xd-i;
sum+=t[xd-x]*t[xd-x+2*i];
ans[xd][4]+=sum*t[xc];
ans[xc][3]+=sum*t[xd];
}
sum=0;
x=n-9*i-1;
for(int xa=n-9*i-1;xa>=1;xa--){
int xb=xa+2*i;
sum+=t[n-(x-xa)]*t[n-(x-xa)-i];
ans[xa][1]+=sum*t[xb];
ans[xb][2]+=sum*t[xa];
}
}
for(int i=1;i<=m;i++){
for(int j=1;j<=4;j++){
cout<<ans[a[i]][j]<<" ";
}
cout<<endl;
}
return 0;
}
这里空空如也
有帮助,赞一个