求助!!!!
by Chasingmydream @ 2024-03-28 19:26:43
@[C++](/user/34413)
by Chasingmydream @ 2024-03-28 19:27:24
@[python](/user/38617)
by Chasingmydream @ 2024-03-28 19:27:45
@[java](/user/21978)
by Chasingmydream @ 2024-03-28 19:27:56
@[Chasingmydream](/user/1092628) 读入一遍,第一遍读到就记录一下位置,第二遍读到统计答案。
by xiaozengX @ 2024-03-28 19:28:02
```cpp
#include<bits/stdc++.h>
using namespace std;
int n;
int a[1005][1005];
int na,nb,nc;
int main()
{
scanf("%d",&n);
int ax=0,ay=0;
int bx=0,by=0;
int i=1,j=1;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
scanf("%d",&a[i][j]);
}
}
for(int x=1;x<=n;x++)
{
for(int y=1;y<n;y++)
{
if(a[x][y]==a[i][j])
{
ax=i;
ay=j;
bx=x;
by=y;
}
if(ax==bx)
{
na++;
}
if(ay==by)
{
nb++;
}
if(ax-bx==ay-by)
{
nc++;
}
}
}
printf("%d %d %d",na,nb,nc);
return 0;
}
```
by Chasingmydream @ 2024-03-28 19:32:19
@[Chasingmydream](/user/1092628) 首先,```for(int y=1; y<n ;y++)```
其次,你这个完全是错的
1. 你枚举 xy 的时候,ij 已经固定了,你要是想暴力就应该
```
for(i 1-> n)
for(j 1-> n)
for(x 1-> n)
for(y 1-> n)
```
2. 如果按上面那样做,复杂度不对, n^4 复杂度 500 跑不过。
正确做法:
```cpp
#include<iostream>
#include<cstring>
using namespace std;
pair<int,int>pos[125050];
int ans[3];
int main(){
int n;cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
int x;cin>>x;
if(pos[x].first==0){
pos[x]=make_pair(i,j);
}else{
if(pos[x].first==i){
ans[0]++;
}
if(pos[x].second==j){
ans[1]++;
}
if(pos[x].first-i==pos[x].second-j){
ans[2]++;
}
}
}
}
for(int i=0;i<3;i++){
cout<<ans[i]<<" ";
}
}
```
by xiaozengX @ 2024-03-28 19:39:26
@[xiaozengX](/user/321529)
谢谢大佬%%%
by Chasingmydream @ 2024-03-28 19:40:45
@[xiaozengX](/user/321529) 但就是能用简单方法吗,我看不懂
by Chasingmydream @ 2024-03-28 19:41:36
@[xiaozengX](/user/321529) 突然感觉自己好弱
by Chasingmydream @ 2024-03-28 19:42:11