NOI Topic Brushing Platform Complete Problem Solution (Multidimensional Array Complete Edition Based on 1.8 Programming)

Because there were too many questions from 1.1 to 1.7, I just skipped the previous one and started it from 1.8.
C++ AC code is attached. Topic-brushing website: noi.openjudge.cn
(This is the full version, all T1-T25.)
01: Matrix exchange rows

#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[5][5],n,m;
for(int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
cin>>a[i][j];
}
}
cin>>m>>n;
for(int i=m-1;i<m;i++)
{
for(int j=0;j<5;j++)
{
swap(a[i][j],a[n-1][j]);
}
}
for(int i=0;i<5;i++)
{
for(int j=0;j<5;j++)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
}
return 0;
}

02. Lattices with diagonal lines in the same column

#include<bits/stdc++.h>
using namespace std;
int main()
{ int n,a,b,c[11][11];
cin>>n>>a>>b;
for(int i=1;i<=n;i++)
cout<<"("<<a<<","<<i<<")"<<" ";
cout<<endl; 
for(int i=1;i<=n;i++)
cout<<"("<<i<<","<<b<<")"<<" ";
cout<<endl;
for(int i=1;i<=n;i++)
for(int k=1;k<=n;k++)
if(a-i==b-k) cout<<"("<<i<<","<<k<<")"<<" ";
cout<<endl;
for(int i=n;i>=1;i--)
for(int k=n;k>=1;k--)
if(i+k==a+b) cout<<"("<<i<<","<<k<<")"<<" ";
cout<<endl;
return 0;
}

03: Calculate the sum of edge elements of a matrix

#include<bits/stdc++.h>
using namespace std;
int s;
int main()
{
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++)  
     for(int j=1;j<=m;j++) 
      {
           int x;
           cin>>x;
           if(i==1||i==n||j==1||j==m) s+=x;
      }
    cout<<s;
}

04: Error Detection

#include<bits/stdc++.h>
using namespace std;
int h[101],l[101];
int n;
int x,y,dx,dy;
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++) 
      for(int j=1;j<=n;j++) 
        {
             int x;
             cin>>x;
             h[i]+=x;
             l[j]+=x;
        }
    for(int i=1;i<=n;i++)
     {
         if(h[i]&1) x++,dx=i;
        if(l[i]&1) y++,dy=i;
     }
    if(x==1&&y==1) cout<<dx<<' '<<dy;
    else if(x>0||y>0) cout<<"Corrupt";
    else cout<<"OK";
}

05:Calculate saddle point

#include<iostream>
using namespace std;
int a[6][6];
bool ok;
int main()
{
    for(int i=1;i<=5;i++)
     for(int j=1;j<=5;j++)
            cin>>a[i][j];
    for(int i=1;i<=5;i++)
     {
          int max_h=-0x7fffffff,k=0;
          for(int j=1;j<=5;j++)
            if(a[i][j]>max_h)
             {
                 max_h=a[i][j];k=j;
            }
         int min_l=0x7fffffff,q=0;
         for(int l=1;l<=5;l++)
          if(a[l][k]<min_l) 
          {
                min_l=a[l][k];q=l;
          }
        if(q==i) 
        {
            cout<<i<<' '<<k<<' '<<a[i][k];
            return 0;
        }
     }
    cout<<"not found";
}

06: Image Similarity

#include<bits/stdc++.h>
using namespace std;
int m,n,a[101][101],s;
int main()
{
    cin>>m>>n;
    for(int i=1;i<=m;i++)
     for(int j=1;j<=n;j++)
      cin>>a[i][j];
    for(int i=1;i<=m;i++)
     for(int j=1;j<=n;j++)
      {
             int x;
             cin>>x;
             if(x==a[i][j]) s++;
      }
     double k=(double)s/(n*m);
     k*=100;
     printf("%.2lf",k);
}

07: Matrix Zero Subtraction Sequence Sum

#include<iostream>
using namespace std;
int a[101][101];
int h[101],l[101];
int main()
{
    int n; cin>>n;
    for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) cin>>a[i][j]; 
    int s=n;    
    for(int k=1;k<=s;k++)
    {
      cout<<a[2][2]<<endl;
      for(int i=1;i<=n;i++) h[i]=a[i][1];
      for(int i=1;i<=n;i++) for(int j=2;j<=n;j++) h[i]=min(h[i],a[i][j]); 
      for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) a[i][j]-=h[i];
      for(int i=1;i<=n;i++) l[i]=a[1][i];
      for(int i=2;i<=n;i++) for(int j=1;j<=n;j++) l[j]=min(l[j],a[i][j]);
      for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) a[i][j]-=l[j];
      if(n>2)
      {
           for(int i=1;i<=n;i++) for(int j=2;j<n;j++)  a[i][j]=a[i][j+1];
         for(int i=2;i<n;i++)  for(int j=1;j<=n;j++) a[i][j]=a[i+1][j];
         n--;
      }
    }
}

08: Matrix Addition

#include<bits/stdc++.h>
using namespace std;
int n,m;
int a[1000][1000];
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
     for(int j=1;j<=m;j++)
      cin>>a[i][j];
    for(int i=1;i<=n;i++)
     for(int j=1;j<=m;j++)
      {
           int x;
           cin>>x;
           a[i][j]+=x;
      }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
         cout<<a[i][j]<<' ';
        cout<<endl;
    }
}

09: Matrix Multiplication

#include<bits/stdc++.h>
using namespace std;
int n,m,k;
int a[101][101],b[101][101],c[101][101];
int main()
{
    cin>>n>>m>>k;
    for(int i=1;i<=n;i++)
     for(int j=1;j<=m;j++)
      cin>>a[i][j];
    for(int i=1;i<=m;i++)
     for(int j=1;j<=k;j++)
      cin>>b[i][j];
    for(int i=1;i<=n;i++)
     for(int j=1;j<=k;j++)
      for(int l=1;l<=m;l++)
    c[i][j]+=a[i][l]*b[l][j];
    for(int i=1;i<=n;i++)
     {
          for(int j=1;j<=k;j++)
           cout<<c[i][j]<<' ';
         cout<<endl;
     }
}

10: Matrix transposition

#include<bits/stdc++.h>
using namespace std;
int n,m,a[101][101];
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
     for(int j=1;j<=m;j++)
      cin>>a[i][j];
    for(int i=1;i<=m;i++)
     {
          for(int j=1;j<=n;j++)
          cout<<a[j][i]<<' ';
         cout<<endl; 
     }
}

11. The Mystery of Image Rotation

#include<bits/stdc++.h>
using namespace std;
int n,m,a[101][101];
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
     for(int j=1;j<=m;j++)
      cin>>a[i][j];
    for(int i=1;i<=m;i++)
     {
         for(int j=n;j>=1;j--)
         cout<<a[j][i]<<' '; 
        cout<<endl;
     }
}

12. Variable multiterminal matrices

#include<bits/stdc++.h>
using namespace std;
int n;
char a[101][101],b[101][101];
bool p[5];
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++)
     for(int j=1;j<=n;j++)
      cin>>a[i][j];
    for(int i=1;i<=n;i++)
     for(int j=1;j<=n;j++)
      cin>>b[i][j];
    for(int i=1;i<=n;i++)
     for(int j=1;j<=n;j++)
     {
         if(b[i][j]!=a[n-j+1][i]) p[1]=true;
         if(b[i][j]!=a[j][n-i+1]) p[2]=true;
         if(b[i][j]!=a[n-i+1][n-j+1]) p[3]=true;
         if(b[i][j]!=a[i][j]) p[4]=true;
     }
     for(int i=1;i<=4;i++)
      if(!p[i])
       {
              cout<<i;return 0; 
       } 
    cout<<'5';
}

13. Blurred Image Processing

#include<bits/stdc++.h>
using namespace std;
int n,m,a[101][101],b[101][101];
int main()
{
    cin>>n>>m;
    for(int i=1;i<=n;i++)
     for(int j=1;j<=m;j++)
      cin>>a[i][j];
    for(int i=1;i<=n;i++)
     for(int j=1;j<=m;j++)
      {
            if(i==1||i==n||j==1||j==m)
             b[i][j]=a[i][j];
            else
             {
               double r=((double)a[i][j]+a[i-1][j]+a[i+1][j]+a[i][j-1]+a[i][j+1])/5;
             b[i][j]=round(r);
           }
      }
     for(int i=1;i<=n;i++)
      {
           for(int j=1;j<=m;j++)
          cout<<b[i][j]<<' ';
         cout<<endl;
      }
}

14. Interesting Minesweeping Game (Mine Number Calculation)

#include<bits/stdc++.h>
using namespace std;
char a[101][101];
int b[101][101]={0};
int main()
{
int n,m,i,j;
cin>>n>>m;
for(i=1;i<=n;++i)
for(j=1;j<=m;++j)
cin>>a[i][j];

for(i=1;i<=n;++i) 
{
for(j=1;j<=m;++j) 
{
if(a[i][j]=='?')
{
if(a[i-1][j]=='*')
b[i][j]++;
if(a[i+1][j]=='*')
b[i][j]++;
if(a[i][j+1]=='*')
b[i][j]++;
if(a[i][j-1]=='*')
b[i][j]++;
if(a[i-1][j-1]=='*')
b[i][j]++;
if(a[i-1][j+1]=='*')
b[i][j]++;
if(a[i+1][j-1]=='*')
b[i][j]++;
if(a[i+1][j+1]=='*')
b[i][j]++;
cout<<b[i][j];
}
else cout<<'*';
}
cout<<endl;
}
return 0;
}

15. Propagation and Diffusion of Bacteria

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<string.h>
using namespace std;
int a[11][11]={0},b[11][11]={0};
int main ()
{
int i,j,n,k;
cin>>a[5][5]>>n;
for(k=1;k<=n;k++)
{
for(i=1;i<=9;i++)
for(j=1;j<=9;j++)
{
b[i][j]=a[i][j]*2+a[i+1][j]+a[i][j+1]+a[i-1][j]+a[i][j-1]+a[i+1][j+1]+a[i-1][j+1]+a[i-1][j-1]+a[i+1][j-1];
}
for(i=1;i<=9;i++)for(j=1;j<=9;j++)a[i][j]=b[i][j];
}
for(i=1;i<=9;i++)
{
for(j=1;j<=9;j++)cout<<b[i][j]<<" ";
cout<<"\n";
}
return 0;
}

16. Matrix games (stone scissors)

#include<bits/stdc++.h>
using namespace std;
int a[11][11],b[11][11];
int main()
{
int n,m;
cin>>m>>n;
a[5][5]=m;
while (n)
{
for(int i=1;i<=9;i++)
{
for(int j=1;j<=9;j++)
{
b[i][j]=a[i][j]*2+a[i-1][j-1]+a[i-1][j]+a[i-1][j+1]+a[i][j-1]+a[i+1][j]+a[i][j+1]+a[i+1][j-1]+a[i+1][j+1];
}
}
for(int i=1;i<=9;i++)
{
for(int j=1;j<=9;j++)
{
a[i][j]=b[i][j];
}
} 
n--;
}
for(int i=1;i<=9;i++)
{
for(int j=1;j<=9;j++)
{
cout<<a[i][j]<<" ";
}
cout<<endl;
} 

return 0;
}

17.The best grass

#include <bits/stdc++.h>
using namespace std;
int main()
{
char a[101][101];
int R,C,s=0; 
cin>>R>>C;
for (int i=1;i<=R;i++)
{
for (int j=1;j<=C;j++)
{
cin>>a[i][j];
}
}
for (int i=1;i<=R;i++) 
{
for (int j=1;j<=C;j++)
{
if (a[i][j]=='#' && a[i-1][j]!='#' && a[i][j-1]!='#') 
{
s++;
}
}
}
cout<<s;
return 0;
}

18. Tumor area

#include <bits/stdc++.h>
using namespace std;
int main()
{
int a,b,c,d,e,f,g,h,k,l,m,n,i,j,x;
scanf("%d",&i);
if(i==1||i==2)
{
printf("0");
return 0;
}
for(a=1,c=1001,d=-1,e=1001,f=-1;i>=a;++a)
{
for(b=1;i>=b;++b)
{
scanf("%d",&x);
if(x==0)
{
if(a<c)
{
c=a;
}
if(b<e)
{
e=b;
}
if(a>d)
{
d=a;
}
if(b>f)
{
f=b;
}
}
}
}
if(d-c-1>=0&&f-e-1>=0)
{
printf("%d",(d-c-1)*(f-e-1));
}
else
{
printf("0");
}
return 0;
}

19. Tumor detection

#include<bits/stdc++.h>
using namespace std;
int n,a[1010][1010],ans,anss;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(a[i][j]<=50){ans++;
if(a[i+1][j]>50||a[i-1][j]>50||a[i][j+1]>50||a[i][j-1]>50||i==1||i==n||j==1||j==n)
anss++;}
}
cout<<ans<<" "<<anss<<endl;
}

20. Repeated

#include <bits/stdc++.h> 
using namespace std;
char a[11][21],b[300];
int main()
{
int i,j,m,n,len,k=0;
cin>>n>>b;
len=strlen(b);
m=len/n;
for(i=0;i<=m;i++)
if(i%2==0)
for(j=0;j<n;j++)
a[i][j]=b[k++];
else for(j=n-1;j>=0;j--) 
a[i][j]=b[k++];
for(i=0;i<n;i++)
for(j=0;j<m;j++)
cout<<a[j][i];
return 0;
}

21. Right-up-left-down traversal of two-dimensional arrays

#include<bits/stdc++.h>
using namespace std;
int r,c,a[101][101],s=0;
int main()
{
cin>>r>>c;
for(int i=0;i<=r-1;++i)
for(int j=0;j<=c-1;++j)
cin>>a[i][j];
for(int k=0;k<=r+c-2;k++) 
for(int i=0;i<=r-1;++i)
for(int j=0;j<=c-1;++j)
{
if(i+j==k)
cout<<a[i][j]<<endl;
} 
return 0;	 
}

22. Magic Fantasy

#include<bits/stdc++.h>
using namespace std;
int n,a[1010][1010],x=1,y;
int main()
{
cin>>n;
y=n;
int u=(2*n)-1;
a[x][y]=1;
for(int i=1;i<=u*u;i++)
{
int q=x,w=y;
if((x==1&&y==u)||(a[x-1][y+1]>0))
q++;
else
if(x==1){
q=u;
w++;
}
else
if(y>=u){
q--;
w=1;
}
else
if(x==q&&y==w){
q--;
w++;
}
a[q][w]=i+1;
x=q;y=w;
}
for(int i=1;i<=u;i++)
{
for(int j=1;j<=u;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
}

23.Double mine

#include<iostream>
using namespace std;
int a[100][100];
int n,m,r1,r2,c1,c2;
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
cin>>a[i][j];
r1=1;r2=n;c1=1;c2=m;
while(r1<=r2&&c1<=c2)
{ for(int j=c1;j<=c2;j++)
cout<<a[r1][j]<<endl;
for(int i=r1+1;i<=r2;i++)
cout<<a[i][c2]<<endl;
if(r1!=r2)
for(int j=c2-1;j>=c1;j--)
cout<<a[r2][j]<<endl;
if(c1!=c2)
for(int i=r2-1;i>r1;i--)
cout<<a[i][c1]<<endl;
r1=r1+1;r2=r2-1;c1=c1+1;c2=c2-1;
}
return 0;
}

24.Snake mine

#include<bits/stdc++.h>
using namespace std;
int main()
{
int a[15][15]={0},n,i=1,j=1,tot=1,q=0;
cin>>n;
while(i<n||j<n)
{
if(i+j<=n){
while(i>1&&j<n){a[i][j]=tot;tot++;i--;j++;}
a[i][j]=tot;tot++;
j++;
while(j>1&&i<n){a[i][j]=tot;tot++;j--;i++;}
a[i][j]=tot;tot++;
i++;
if(i+j>n&&n%2==0){tot--;}
}
else{
while(i>1&&j<n){a[i][j]=tot;tot++;i--;j++;}
a[i][j]=tot;tot++;
i++;
while(j>1&&i<n){a[i][j]=tot;tot++;j--;i++;}
a[i][j]=tot;tot++;
j++;
}
}
a[i][j]=tot;tot++;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
cout<<a[i][j]<<' ';
cout<<endl;
}
}

25. Spiral Encryption of Password

#include<iostream>
#include<cmath>
#include<cstdio>
#include<cstring> 
using namespace std;
int main()
{
int r,c,a[21][21],ba[81][5],y=0,x=0,dx=1,dy=0;
memset(ba,0,sizeof(ba));	
memset(a,-1,sizeof(a));	
char b[81];
cin>>r>>c;getchar();gets(b);
int dr=r-1,xr=1,dc=c-1,xc=0;
for(int i=0;b[i];i++){
int z,j=4;
if(b[i]==' '){z=0;ba[i][j]=0;}else z=b[i]-'A'+1;
while(z!=0){ba[i][j]=z%2;z/=2;j--;}
}
for(int i=0;b[i];i++)for(int j=0;j<5;j++){
if(a[y][x]!=-1)break;
a[y][x]=ba[i][j];
y+=dy;x+=dx;
if(x==dc&&dx==1){dy=1;dx=0;dc--;}
if(y==dr&&dy==1){dy=0;dx=-1;dr--;}
if(x==xc&&dx==-1){dy=-1;dx=0;xc++;}
if(y==xr&&dy==-1){dy=0;dx=1;xr++;}
}
for(int i=0;i<r;i++){	
for(int j=0;j<c;j++)
if(a[i][j]!=-1)
cout<<a[i][j];else cout<<0;
}
}

If some code is longer, there may be a simpler way.
Thank you for reading! Like, please pay attention, thank you!
Topic-brushing website: noi.openjudge.cn

Added by Jim_Bo on Wed, 31 Jul 2019 09:54:30 +0300