Dohányozni tilos!

[8307] Dohányozni Tilos!
A feladat egy város egyszerűsített térképén bejelölni azokat a pontokat, ahol tilos a dohányzás. Adott a város cellákra osztott térképe, az hogy mely cellákban van kórház illetve iskola, valamint az, hogy ezek mekkora körzetében tilos a dohányzás. A feladat a térképen bejelölni azokat a cellákat amelyekben a kellő távolság hiánya miatt tilos a dohányzás. A város térképén minden cellát a középpontja azonosít.
Bemenet
A bemenetet a be.txt fájlból kell olvasni. A bemenet több sorból áll. Az első sorban két egész érték van szóközzel elválasztva, M és N (1 <= M,N <= 100), amik a térkép "magasságát” illetve "szélességét" jelentik, cellákban kifejezve. A második sor szintén két egész értéket tartalmaz: az első az iskolák (I), a második a kórházak (K) körüli tiltott zóna méretét tartalmazza (1 <= I,K <= 5). A 3. sorban egy egész szám van, ami megadja, hogy összesen hány iskola és kórház van a városban, majd soronként a sor elején egy ’I’ (iskola) vagy ’K’ (kórház) karakter, szóköz, majd két egész szám (S,O) szintén szóközzel
elválasztva, amik az adott intézmény sor, oszlop koordinátái (0 <= S < M, 0 <= O < N). A sorok és
oszlopok számozása 0-val kezdődik, a (0, 0) koordinátájú cella a bal felső cella. Egy cellában legfeljebb egy intézmény lehet.
Kimenet
A kimenetet a ki.txt fájlba kell írni. A kimenet pontosan M sor, minden sorban pontosan N darab ’.’, ’*’, ’I’ vagy ’K’ karakterrel. Az iskolák illetve kórházak celláit ’I’ illetve ’K’ karakterrel kell megjelölni.
Azokat a cellákat, ahol tilos a dohányzás, mert iskola vagy kórház található a megadott távolságon belül (légvonalban), a ’*’ karakterrel kell megjelölni. Azt a cellát, ahol szabad a dohányzás mert a közelben nincs intézmény egy ’.’ karakter jelöli. A (0, 0) koordinátájú cella a bal felső cella. A távolság számításánál az egyes cellák középpontjait kell figyelembe venni olyan módon, hogy a tiltás egy "zárt" távolságot jelent, azaz a határérték még tiltott zónának számít.
Példák
1. példa
Input
10 15
2 4
2
I 3 3
K 5 10
Output
...............
...*......*....
..***...*****..
.**I**.*******.
..***..*******.
...*..****K****
.......*******.
.......*******.
........*****..
..........*....

2
2. példa
Input
11 21
3 5
3
K 6 10
I 3 8
I 3 12
Output
........*...*........
......*********......
......*********......
.....***I***I***.....
......*********......
......*********......
.....*****K*****.....
......*********......
......*********......
......*********......
.......*******.......

3. példa
Input
10 20
1 1
2
I 1 1
K 8 18
Output
.*..................
*I*.................
.*..................
....................
....................
....................
....................
..................*.
.................*K*
..................*.



Megoldás:


#includeint main()
{
FILE *fb, *ki;
ki=fopen("ki.txt","w");
if(fb=fopen("be.txt","r")){
int cv1=0, cv2, cv3, o, s, i, k, szam, be=0;
fscanf(fb,"%d %d\n%d %d\n%d\n", &o, &s, &i, &k, &szam);
char ivk[szam+1];
int x[szam],y[szam], cv=0;
while(cv{
fscanf(fb,"%c %d %d\n", &ivk[cv], &x[cv], &y[cv]);
cv++;
}
cv=0;
fclose(fb);
if(o<=100 && o>=1 && s<=100 && s>=1 && i>=1 && i<=5 && k>=1 && k<=5){


char t[o+1][s+1], valami;
int b,j,f,l;



for(cv1=0;cv1 {
for(cv2=0;cv2 {
t[cv1][cv2]='.';
cv=0;
while(cv<=szam){
if(ivk[cv]=='K'){
if(((cv1-(x[cv]))-(cv2-(y[cv]))>=(-k)
&&(cv1-(x[cv]))-(cv2-(y[cv]))<=(k)
&&(cv1-(x[cv]))+(cv2-(y[cv]))>=(-k)
&&(cv1-(x[cv]))+(cv2-(y[cv]))<=(k)
)||((
cv1-(x[cv])>(-(k))
&&cv1-(x[cv])<(k)
&&cv2-(y[cv])<(k)
&&cv2-(y[cv])>(-(k)))))
{
if(k<4)
t[cv1][cv2]='*';
else if((((cv1-x[cv])+(cv2-y[cv])+(2*(k-1)))
&&
((cv1-x[cv])+(cv2-y[cv])-(2*(k-1)))
&&
(((cv1-x[cv])!=(k-1)&&(cv2-y[cv])!=(k-1))
||((cv1-x[cv])-(cv2-y[cv])+(2*(k-1))))
&&
(((cv1-x[cv])!=(k-1)&&(cv2-y[cv])!=(k-1))
||((cv1-x[cv])-(cv2-y[cv])-(2*(k-1))))))
t[cv1][cv2]='*';
}}
if(ivk[cv]=='I'){
if(((cv1-(x[cv]))-(cv2-(y[cv]))>=(-i)
&&(cv1-(x[cv]))-(cv2-(y[cv]))<=(i)
&&(cv1-(x[cv]))+(cv2-(y[cv]))>=(-i)
&&(cv1-(x[cv]))+(cv2-(y[cv]))<=(i)
)||((
cv1-(x[cv])>(-(i))
&&cv1-(x[cv])<(i)
&&cv2-(y[cv])<(i)
&&cv2-(y[cv])>(-(i)))))
{
if(i<4)
t[cv1][cv2]='*';
else if((((cv1-x[cv])+(cv2-y[cv])+(2*(i-1)))
&&
((cv1-x[cv])+(cv2-y[cv])-(2*(i-1)))
&&
(((cv1-x[cv])!=(i-1)&&(cv2-y[cv])!=(i-1))
||((cv1-x[cv])-(cv2-y[cv])+(2*(i-1))))
&&
(((cv1-x[cv])!=(i-1)&&(cv2-y[cv])!=(i-1))
||((cv1-x[cv])-(cv2-y[cv])-(2*(i-1))))))
t[cv1][cv2]='*';
}


}
cv++;
}
cv=0;
while(cv {
if((cv1==x[cv])&&(cv2==y[cv]))
{
t[cv1][cv2]=ivk[cv];
}
cv++;
}
}
}
for(cv1=0;cv1 {
for(cv2=0;cv2 {
fprintf(ki,"%c",t[cv1][cv2]);

}
fprintf(ki,"\n");
}


}}
else
fprintf(ki,"\n");
fclose(ki);
return 0;
}

Új blog weboldal helyett

Úgy tűnik a weboldalam az extra.hu-nál megszüntetem, a popup ablakok, állandó trójai fertőzések miatt, amiért szinte mindig kitilt a google az indexből.
Jelenleg még ismerkedem a bloggal, később átmásolom a régi bejegyzéseim az előző oldalamról.

Magyar Várak télen

Készítettem egy új videót Youtube-ra, a magyar várakról téli képeket tettem fel, a képek mindenhonnan össze lettek válogatva, többnyire a panoramio.com-ról.