← Back to topics
Topic

Z-domine & Z-clock

V
Vidakovic
Da li bi mi neko mogao objasniti ove zadatke? Hvala unapred!
h
halil
Primer iz teksta zadatka:
3927,273 = 1*3600 + 5*60 + 27,273
Znači u 1h 5m 27,273s poklopiće se kazaljke sata.
0 i 43200 su ponoć ili podne.

Znaš li igru domine?
F
FilipKeri
Z-domine. U zadatku dobiješ N parova brojeva i ti ih moraš tako poredati da tvore neku vrstu "lanca." 2. član prvog para mora biti 1. član drugog para. Primjer iz zadatka:

Input:
3
1 3
3 2
2 6
Output:
3

Možemo ovako parove složiti:
1 3 - 3 2 - 2 6

U prvom paru ( 1 3 ) drugi član je 3, to znači da u sljedećem paru ( 3 2 ) prvi član mora biti jednak 3.
Ti sada dobiješ N parova i moraš ih poredati tako da napravi najduži "lanac." Nadam se da si me shvatio, pitaj ako nije nesto jasno
V
Vidakovic
Ovo je moja ideja za Z-domine. Prodje mi poslednjih 5 primera a na prvih deset daje Wrong Result.
Sta se moze popraviti?
# include <iostream>
using namespace std;
int n,x[1000],y[1000],i,j,k,b1,b2;
int main ()
{
cin>>n;
for (i=1;i<=n;i++)
cin>>x[i]>>y[i];
k=1;
j=2;
b1=x[1];
b2=y[1];
while (j<=n)
{
if ((x[j]==b1)||(y[j]==b2))
{
k++;
b1=x[j];
b2=y[j];
j++;
}
else j++;
}
cout<<k<<endl;
system ("pause");
}
m
matteo123
Ja neznam šta je meni krivo:
evo linka
http://www.z-trening.com/submit.php?submit=7100136689&subm_code=1
V
Vidakovic
Z-domine se rade preko DFS
m
matteo123
Ne kužim kako to rješit preko DFS-a, jel može neko objašnjenje?
V
Vidakovic



# include <iostream>

# include <cstdio>

using namespace std;



int i,j,n,a,b,sol(0),k[7][7],sum(0);



void dfs (int pos)

{

int i;

sol=max(sol,sum);



for (i=0;i<7;i++)

if (k[pos][i])

{

k[pos][i]--;

k[i][pos]--;

sum++;

dfs(i);

sum--;

k[pos][i]++;

k[i][pos]++;

}

}



int main ()

{

scanf("%d",&n);



for (i=0;i<7;i++)

for (j=0;j<7;j++)

k[i][j]=0;



for (i=0;i<n;i++)

{

scanf("%d",&a);

scanf("%d",&b);

k[a][b]++;

k[b][a]++;

}



for (i=0;i<7;i++)

for (j=0;j<7;j++)

if (k[i][j])

{

k[i][j]--;

k[j][i]--;

sum=1;

dfs(j);

k[i][j]++;

k[j][i]++;

}



printf("%d",sol);



//system ("pause");

}



m
matteo123
Eh, dobro nisam mislio direktan kod, nego neko objašnjenje.
m
matteo123
Jel bi moglo kakvo objašnjenje kako si došao do ovog rješenja??
b
boris4
evo ja cu ti dati objasnjenje :D

Znaci ovde radis rekurziju, ali umesto da u rekrzivnoj funkciji trazis sledecu dominu tako sto ces ici po svim preostalim dominama i pokusavati svaku koja moze, ti lepo napravis niz k[ a ][ b ] -> koji ce drzati broj domina oblika [ a, b ] i onda u rekurzivnoj funkciji jednostavnom proverom da li je k[ ta ][ tb ] > 0, gde su ta i tb brojevi na trazenoj domini, saznajes da li ima domina tog oblika.

ukoliko ti nije jasno ovo sto sam napisao, probaj da ispratis moje objasnjenje uz kod koji je postavljen.