Advertisement
jeff69

Mario's Homework nigga

Jul 15th, 2017
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.49 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define sc(a) scanf("%d",&a)
  4. #define FF vector<vector<int>>
  5. typedef long long ll;
  6. const int MX=1e5+69;
  7. struct row
  8. {
  9.     int val;
  10.     row * next;
  11.     row()
  12.     {
  13.         next=NULL;
  14.     }
  15. };
  16. class Holemat
  17. {
  18. private:
  19.     int n,m;
  20.  
  21. public:
  22.     int getm()
  23.     {
  24.         return m;
  25.     }
  26.     int getn()
  27.     {
  28.         return n;
  29.     }
  30.  
  31.     row ** MAT;
  32.     Holemat()
  33.     {
  34.         MAT = NULL;
  35.         n=m=0;
  36.     }
  37.     Holemat(int N,int M)
  38.     {
  39.         n=N,m=M;
  40.         MAT = new row* [n+69];
  41.         for(int i=0; i<=n+6; i++)
  42.             MAT[i]=NULL;
  43.     }
  44.     void insert(int,int );
  45. };
  46. void Holemat::insert(int x,int r)
  47. {
  48.  
  49.     if(MAT[r]==NULL)
  50.         MAT[r]=new row;
  51.     row * p = MAT[r];
  52.     while(p->next)
  53.         p=p->next;
  54.     p->next= new row;
  55.     p->next->val = x;
  56. }
  57. void writeHmat(Holemat & cur)
  58. {
  59.     for(int i=1; i<=cur.getn(); i++)
  60.     {
  61.         row * p = cur.MAT[i];
  62.         if(p==NULL)
  63.         {
  64.             puts("");
  65.             continue;
  66.         }
  67.         while(p->next)
  68.         {
  69.             printf("%d ",p->next->val);
  70.             p=p->next;
  71.         }
  72.         puts("");
  73.     }
  74. }
  75. FF adj;
  76. void readhmat(FF& ad,Holemat& A)
  77. {
  78.     for(int i=1; i<=A.getn(); i++)
  79.         for(int j=1; j<=A.getm(); j++)
  80.             if(adj[i][j]!=0)
  81.                 A.insert(adj[i][j],i);
  82. }
  83. int n,m;
  84. void in()
  85. {
  86.     scanf("%d %d",&n,&m);
  87.     adj.clear();
  88.     adj.resize(n+6);
  89.     for(int i=1; i<=n; i++)
  90.         adj[i].resize(m+6);
  91.     for(int i=1; i<=n; i++)
  92.         for(int j=1; j<=m; j++)
  93.         {
  94.             int X;
  95.             scanf("%d",&X);
  96.             adj[i][j]=X;
  97.         }
  98.  
  99.  
  100. }
  101.  
  102. void addhmat(Holemat & a,Holemat & b,Holemat & cur)
  103. {
  104.     adj.clear();
  105.     adj.resize(n+6);
  106.     for(int i=1; i<=n; i++)
  107.         adj[i].resize(m+6);
  108.     for(int i=1; i<=n; i++)
  109.         for(int j=1; j<=m; j++)
  110.             adj[i][j]=0;
  111.     for(int i=1; i<=a.getn(); i++)
  112.     {
  113.         row * p = a.MAT[i];
  114.         int j=0;
  115.         if(p!=NULL)
  116.         {
  117.             while(p->next)
  118.             {
  119.                 adj[i][++j]+=p->next->val;
  120.                 p=p->next;
  121.             }
  122.         }
  123.         p=b.MAT[i];
  124.         j=0;
  125.         if(p!=NULL)
  126.         {
  127.             while(p->next)
  128.             {
  129.                 adj[i][++j]+=p->next->val;
  130.                 p=p->next;
  131.             }
  132.         }
  133.     }
  134.     readhmat(adj,cur);
  135.     return;
  136. }
  137. int sumhmat(Holemat& cur)
  138. {
  139.     int ans =0;
  140.     for(int i=1; i<=cur.getn(); i++)
  141.     {
  142.         row * p = cur.MAT[i];
  143.         if(p==NULL)
  144.         {
  145.             continue;
  146.         }
  147.         while(p->next)
  148.         {
  149.             ans+=p->next->val;
  150.             p=p->next;
  151.         }
  152.     }
  153.     return ans;
  154. }
  155. int maxhmat( Holemat& cur)
  156. {
  157.     int mx =-1e9;
  158.     for(int i=1; i<=cur.getn(); i++)
  159.     {
  160.         row * p = cur.MAT[i];
  161.         if(p==NULL)
  162.         {
  163.             continue;
  164.         }
  165.         while(p->next)
  166.         {
  167.             mx=max(p->next->val,mx);;
  168.             p=p->next;
  169.         }
  170.     }
  171.     return mx;
  172. }
  173. int main()
  174. {
  175.     in();
  176.     Holemat mat1(n,m);
  177.     readhmat(adj,mat1);
  178.     writeHmat(mat1);
  179.  
  180.     /// second holemat
  181.     in();
  182.  
  183.     Holemat mat2(n,m);
  184.     readhmat(adj,mat2);
  185.     writeHmat(mat2);
  186.     Holemat ans(n,m);
  187.     if(mat1.getm()!=mat2.getm()||mat1.getn()!=mat2.getn())
  188.         return puts("Error No valid input");
  189.     addhmat(mat1,mat2,ans);
  190.     writeHmat(ans);
  191.     cout<<sumhmat(mat1)<<'\n'<<maxhmat(mat1);
  192.     return 0;
  193. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement