我用结构体装了一个矩阵,开了Squ[MAXN][MAXN](MAXN=510),结果使得编译器进入不了函数/whl
整整懵逼了一个上午,后来把程序一个位置一个位置的删除再测试后,发现是矩阵的封装大小出问题了,但还是很不解。。。
希望大佬们帮蒟蒻解答一下小疑惑(gratitude.jpg)
//LOJ 2100
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <cstring>
#define LL long long
#define Lowbit(X) (X&(-X))
#define Lson (X<<1)
#define Rson (X<<1|1)
#define Cl(X,Y) memset((X),(Y),sizeof(X))
#define FOR(i,A,B) for(int i=A;i<=B;i++)
#define BOR(i,A,B) for(int i=A;i>=B;i--)
#define FOR_SIDE(i,A) for(int i=Head[A];i;i=Next[i])
#define INF 0x7fffffff
using namespace std;
const int MAXN=510;
int Total,Ans;
struct Node {
int Squ[MAXN][MAXN];//改成200,200是可以的
int Row,Line;
inline void Clean(int X) { FOR(i,1,Row) FOR(j,1,Line) Squ[i][j]=X; }
friend Node operator ^ (Node A,Node B) {
Node Temp=A;
Temp.Clean(0);
Temp.Row=A.Row; Temp.Line=B.Line;
FOR(i,1,Temp.Row) FOR(j,1,Temp.Line) FOR(k,1,A.Line)
Temp.Squ[i][j]+=A.Squ[i][k]*B.Squ[k][j];
return Temp;
}
friend Node operator - (const Node &A,const Node &B) {
Node Temp=A;
Temp.Clean(0);
Temp.Row=A.Row; Temp.Line=A.Line;
FOR(i,1,Temp.Row) FOR(j,1,Temp.Line)
Temp.Squ[i][j]=A.Squ[i][j]-B.Squ[i][j];
return Temp;
}
}A,B,C,Mine;
inline void File() {
freopen(".in","r",stdin);
freopen(".out","w",stdout);
}
inline void Check() {
// cout<<"222"<<endl;
Node Res=(A^B)-C;
Ans=max(Ans,(Res^Mine).Squ[1][1]);
}
int main() {
//File();
srand(time(NULL));
scanf("%d",&Total);
B.Row=B.Line=C.Line=A.Line=Mine.Row=Total;
C.Row=A.Row=Mine.Line=1;
FOR(i,1,Total) FOR(j,1,Total) { scanf("%d",&B.Squ[i][j]); }
FOR(i,1,Total) { scanf("%d",&C.Squ[1][i]); }
FOR(i,1,Total) { A.Squ[1][i]=1; Mine.Squ[i][1]=1; }
// cout<<"111"<<endl;
Check();
// cout<<"333"<<endl;
FOR(i,1,100) {
int T=(rand()%Total)+1;
A.Squ[1][T]^=1; Mine.Squ[T][1]^=1;
Check();
}
printf("%d\n",Ans);
//fclose(stdin); fclose(stdout);
system("pause");
return 0;
}