问个问题:struct装矩阵时,内部的矩阵可以开多大
  • 板块学术版
  • 楼主DeNeRATe
  • 当前回复7
  • 已保存回复7
  • 发布时间2020/8/1 11:32
  • 上次更新2023/11/6 21:36:39
查看原帖
问个问题:struct装矩阵时,内部的矩阵可以开多大
38171
DeNeRATe楼主2020/8/1 11:32

在做P3973 [TJOI2015]线性代数

我用结构体装了一个矩阵,开了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;
}
2020/8/1 11:32
加载中...