Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- #define sc(a) scanf("%d",&a)
- #define FF vector<vector<int>>
- typedef long long ll;
- const int MX=1e5+69;
- struct row
- {
- int val;
- row * next;
- row()
- {
- next=NULL;
- }
- };
- class Holemat
- {
- private:
- int n,m;
- public:
- int getm()
- {
- return m;
- }
- int getn()
- {
- return n;
- }
- row ** MAT;
- Holemat()
- {
- MAT = NULL;
- n=m=0;
- }
- Holemat(int N,int M)
- {
- n=N,m=M;
- MAT = new row* [n+69];
- for(int i=0; i<=n+6; i++)
- MAT[i]=NULL;
- }
- void insert(int,int );
- };
- void Holemat::insert(int x,int r)
- {
- if(MAT[r]==NULL)
- MAT[r]=new row;
- row * p = MAT[r];
- while(p->next)
- p=p->next;
- p->next= new row;
- p->next->val = x;
- }
- void writeHmat(Holemat & cur)
- {
- for(int i=1; i<=cur.getn(); i++)
- {
- row * p = cur.MAT[i];
- if(p==NULL)
- {
- puts("");
- continue;
- }
- while(p->next)
- {
- printf("%d ",p->next->val);
- p=p->next;
- }
- puts("");
- }
- }
- FF adj;
- void readhmat(FF& ad,Holemat& A)
- {
- for(int i=1; i<=A.getn(); i++)
- for(int j=1; j<=A.getm(); j++)
- if(adj[i][j]!=0)
- A.insert(adj[i][j],i);
- }
- int n,m;
- void in()
- {
- scanf("%d %d",&n,&m);
- adj.clear();
- adj.resize(n+6);
- for(int i=1; i<=n; i++)
- adj[i].resize(m+6);
- for(int i=1; i<=n; i++)
- for(int j=1; j<=m; j++)
- {
- int X;
- scanf("%d",&X);
- adj[i][j]=X;
- }
- }
- void addhmat(Holemat & a,Holemat & b,Holemat & cur)
- {
- adj.clear();
- adj.resize(n+6);
- for(int i=1; i<=n; i++)
- adj[i].resize(m+6);
- for(int i=1; i<=n; i++)
- for(int j=1; j<=m; j++)
- adj[i][j]=0;
- for(int i=1; i<=a.getn(); i++)
- {
- row * p = a.MAT[i];
- int j=0;
- if(p!=NULL)
- {
- while(p->next)
- {
- adj[i][++j]+=p->next->val;
- p=p->next;
- }
- }
- p=b.MAT[i];
- j=0;
- if(p!=NULL)
- {
- while(p->next)
- {
- adj[i][++j]+=p->next->val;
- p=p->next;
- }
- }
- }
- readhmat(adj,cur);
- return;
- }
- int sumhmat(Holemat& cur)
- {
- int ans =0;
- for(int i=1; i<=cur.getn(); i++)
- {
- row * p = cur.MAT[i];
- if(p==NULL)
- {
- continue;
- }
- while(p->next)
- {
- ans+=p->next->val;
- p=p->next;
- }
- }
- return ans;
- }
- int maxhmat( Holemat& cur)
- {
- int mx =-1e9;
- for(int i=1; i<=cur.getn(); i++)
- {
- row * p = cur.MAT[i];
- if(p==NULL)
- {
- continue;
- }
- while(p->next)
- {
- mx=max(p->next->val,mx);;
- p=p->next;
- }
- }
- return mx;
- }
- int main()
- {
- in();
- Holemat mat1(n,m);
- readhmat(adj,mat1);
- writeHmat(mat1);
- /// second holemat
- in();
- Holemat mat2(n,m);
- readhmat(adj,mat2);
- writeHmat(mat2);
- Holemat ans(n,m);
- if(mat1.getm()!=mat2.getm()||mat1.getn()!=mat2.getn())
- return puts("Error No valid input");
- addhmat(mat1,mat2,ans);
- writeHmat(ans);
- cout<<sumhmat(mat1)<<'\n'<<maxhmat(mat1);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement