Se dă o matrice cu n linii și m coloane și elemente numere naturale. Determinați pentru câte dintre elementele matricei toți vecinii au valori diferite între ele.
C++ pls
Răspunsuri la întrebare
Răspuns de
26
Raspuns:
#include <iostream>
using namespace std;
int n,m,a[103][103],i,j,k;
int main()
{
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]!=a[i][j-1] && a[i][j]!=a[i-1][j] && a[i][j]!=a[i+1][j] && a[i][j]!=a[i][j+1])
k++;
cout<<k<<" ";
return 0;
}
BONUS:
//Problema #1377, rezolvare 100p de Ouroboros
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
long x,MIN=1000000001,MAX=0,nrdiv,contor=1,b,a,n,nr;
ifstream fin("maxd.in");
ofstream fout("maxd.out");
fin>>a>>b;
while(a<=b)
{
nrdiv=1;
x=2;
n=b;
while(n>1)
{
if(x*x>n)
x=n;
if(n%x==0)
{
nr=0;
while(n%x==0)
{
nr++;
n/=x;
}
nrdiv*=nr+1;
}
x=x+1;
}
if(nrdiv>MAX)
{
MAX=nrdiv;
contor=1;
MIN=b;
}
else if (nrdiv==MAX)
{
contor++;
MIN=b;
}
b--;
}
fout<<MIN<<' '<<MAX<<' '<<contor<<'\n';
return 0;
}
//Problema #1131, "Arc", rezolvare 100p de Ouroboros
#include <fstream>
using namespace std;
ifstream fin("arc.in");
ofstream fout("arc.out");
int a[10001],i,k,f[10001],p,n,x,lmax,v;
void v1()
{
int secventa=1;
for(i=1;i<=n;++i)
fin>>a[i];
for(i=2;i<=n;++i)
if(a[i-1]!=a[i])
secventa++;
fout<<secventa<<'\n';
}
void v2()
{
f[1]=1;
k=1;
lmax=1;
fin>>a[1];
for(i=2;i<=n;++i)
{
fin>>x;
if(x==a[k])
f[k]++;
else
{
if(f[k]>lmax)
lmax=f[k];
a[++k]=x;
f[k]=1;
}
}
n=k;
}
void v3()
{
lmax=1;
for(i=1;i<=n;++i)
if(f[i]>lmax)
lmax=f[i],k=i;
i=0;
if(lmax>2)
{
while(k-i>0 && k+i<=n && a[k-i]==a[k+i] && f[k-i]+f[k+i]>2)
i++;
if (k-i>0 and k+i<=n and a[k-i]==a[k+i])
{
f[k-i]+=f[k+i];
for (p=k+i+1;p<=n;++p)
{
a[p-2*i]=a[p];
f[p-2*i]=f[p];
}
n=n-2*i;
}
else
{
for (p=k+i;p<=n;++p)
{
a[p-2*i+1]=a[p];
f[p-2*i+1]=f[p];
}
n=n-2*i+1;
}
}
}
int main()
{
fin>>v>>n;
if(v==1)
v1();
if(v==2)
{ v2();
while(lmax>2)
v3();
int s=0;
for(i=1;i<=n;++i)
s+=f[i];
fout<<s<<'\n';
for(i=1;i<=n;++i)
for (int j=1;j<=f[i];++j)
fout<<a[i]<<'\n';
}
return 0;
}
//Problema #1446, "Memory002", rezolvare 100p de Ouroboros
//Modul de lucru e acelasi ca si la memory005. Practic, citesti din fisier de 2 ori, si declari toate variabilele globale.
//Astfel, utilizezi minimum de memorie, cu 0 in stiva. Nu uita sa folosesti 2 nume diferite pentru prima intrare si pentru a doua
//De exemplu, eu am folosit pentru prima citire "fin" si pentru a doua "fin1".
//Cam atat. Mult succes !
#include <iostream>
#include <fstream>
using namespace std;
int n,x,i,mini=2000000001,maxi=-2000000001,pozmin,pozmax;
long long S;
ifstream fin("memory002.in");
ifstream fin1("memory002.in");
ofstream fout("memory002.out");
int main()
{
fin>>n;
for(i=1;i<=n;i++)
{
fin>>x;
if(x<mini)
mini=x,pozmin=i;
if(x>maxi)
maxi=x,pozmax=i;
}
fin.close();
if(pozmin>pozmax)
swap(pozmin,pozmax);
fin1>>n;
for(i=1;i<pozmin;i++)
fin1>>x;
for(i=pozmin;i<=pozmax;i++)
{
fin1>>x;
S=S+x;
}
fout<<S;
return 0;
}
#include <iostream>
using namespace std;
int n,m,a[103][103],i,j,k;
int main()
{
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]!=a[i][j-1] && a[i][j]!=a[i-1][j] && a[i][j]!=a[i+1][j] && a[i][j]!=a[i][j+1])
k++;
cout<<k<<" ";
return 0;
}
BONUS:
//Problema #1377, rezolvare 100p de Ouroboros
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
long x,MIN=1000000001,MAX=0,nrdiv,contor=1,b,a,n,nr;
ifstream fin("maxd.in");
ofstream fout("maxd.out");
fin>>a>>b;
while(a<=b)
{
nrdiv=1;
x=2;
n=b;
while(n>1)
{
if(x*x>n)
x=n;
if(n%x==0)
{
nr=0;
while(n%x==0)
{
nr++;
n/=x;
}
nrdiv*=nr+1;
}
x=x+1;
}
if(nrdiv>MAX)
{
MAX=nrdiv;
contor=1;
MIN=b;
}
else if (nrdiv==MAX)
{
contor++;
MIN=b;
}
b--;
}
fout<<MIN<<' '<<MAX<<' '<<contor<<'\n';
return 0;
}
//Problema #1131, "Arc", rezolvare 100p de Ouroboros
#include <fstream>
using namespace std;
ifstream fin("arc.in");
ofstream fout("arc.out");
int a[10001],i,k,f[10001],p,n,x,lmax,v;
void v1()
{
int secventa=1;
for(i=1;i<=n;++i)
fin>>a[i];
for(i=2;i<=n;++i)
if(a[i-1]!=a[i])
secventa++;
fout<<secventa<<'\n';
}
void v2()
{
f[1]=1;
k=1;
lmax=1;
fin>>a[1];
for(i=2;i<=n;++i)
{
fin>>x;
if(x==a[k])
f[k]++;
else
{
if(f[k]>lmax)
lmax=f[k];
a[++k]=x;
f[k]=1;
}
}
n=k;
}
void v3()
{
lmax=1;
for(i=1;i<=n;++i)
if(f[i]>lmax)
lmax=f[i],k=i;
i=0;
if(lmax>2)
{
while(k-i>0 && k+i<=n && a[k-i]==a[k+i] && f[k-i]+f[k+i]>2)
i++;
if (k-i>0 and k+i<=n and a[k-i]==a[k+i])
{
f[k-i]+=f[k+i];
for (p=k+i+1;p<=n;++p)
{
a[p-2*i]=a[p];
f[p-2*i]=f[p];
}
n=n-2*i;
}
else
{
for (p=k+i;p<=n;++p)
{
a[p-2*i+1]=a[p];
f[p-2*i+1]=f[p];
}
n=n-2*i+1;
}
}
}
int main()
{
fin>>v>>n;
if(v==1)
v1();
if(v==2)
{ v2();
while(lmax>2)
v3();
int s=0;
for(i=1;i<=n;++i)
s+=f[i];
fout<<s<<'\n';
for(i=1;i<=n;++i)
for (int j=1;j<=f[i];++j)
fout<<a[i]<<'\n';
}
return 0;
}
//Problema #1446, "Memory002", rezolvare 100p de Ouroboros
//Modul de lucru e acelasi ca si la memory005. Practic, citesti din fisier de 2 ori, si declari toate variabilele globale.
//Astfel, utilizezi minimum de memorie, cu 0 in stiva. Nu uita sa folosesti 2 nume diferite pentru prima intrare si pentru a doua
//De exemplu, eu am folosit pentru prima citire "fin" si pentru a doua "fin1".
//Cam atat. Mult succes !
#include <iostream>
#include <fstream>
using namespace std;
int n,x,i,mini=2000000001,maxi=-2000000001,pozmin,pozmax;
long long S;
ifstream fin("memory002.in");
ifstream fin1("memory002.in");
ofstream fout("memory002.out");
int main()
{
fin>>n;
for(i=1;i<=n;i++)
{
fin>>x;
if(x<mini)
mini=x,pozmin=i;
if(x>maxi)
maxi=x,pozmax=i;
}
fin.close();
if(pozmin>pozmax)
swap(pozmin,pozmax);
fin1>>n;
for(i=1;i<pozmin;i++)
fin1>>x;
for(i=pozmin;i<=pozmax;i++)
{
fin1>>x;
S=S+x;
}
fout<<S;
return 0;
}
Alte întrebări interesante
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
8 ani în urmă
Matematică,
9 ani în urmă
Limba română,
9 ani în urmă
Limba română,
9 ani în urmă