Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #define Nmax 152
- #define Nbecuri 101
- using namespace std;
- int P,N,M,K,A[Nmax][Nmax];
- struct bec
- {
- int A,B,C; /// Pozitia (A,B) a becului si consumul C
- };
- bec b[Nbecuri]; /// Becurile
- int NrC[Nbecuri]; /// Numarul de copaci luminati de becul i
- void NrCopaci(int n,int x0,int y0) /// Calculeaza numarul de copaci luminati de becul n
- {
- /// Se poate demonstra matematic ca lanterna din pozltia (x0,y0) lumineaza pomul
- /// din pozitia (x,y) deca si numai daca c.m.m.d.c.(x-x0,y-y0)=1.
- /// Prin urmare, este suficient sa numaram cati pomi respecta aceasta conditie.
- int a,b,r;
- for(int x=1;x<=N;++x)
- for(int y=1;y<=M;++y)
- {
- a=x>x0?x-x0:x0-x;
- b=y>y0?y-y0:y0-y;
- while(b) /// ca1cu1ez cmmdc
- r=a%b,a=b,b=r;
- if(A[x][y]==0&&a==1) /// pom luminat
- ++NrC[n]; /// deci i1 numar
- }
- }
- int main()
- {
- ifstream f("bec.in");
- f>>P>>N>>M>>K;
- for(int i=1;i<=K;++i)
- f>>b[i].A>>b[i].B>>b[i].C,A[b[i].A][b[i].B]=b[i].C;
- f.close();
- for(int i=1;i<=K;++i) /// Calculam pentru fiecare bec i numarul de copaci luminati
- NrCopaci(i,b[i].A,b[i].B);
- int sol=NrC[1],consum=b[1].C,lin=b[1].A,col=b[1].B;
- for(int i=2;i<=K;++i)
- if(NrC[i]>sol)
- sol=NrC[i],consum=b[i].C,lin=b[i].A,col=b[i].B;
- ofstream g("bec.out");
- if(P==1)
- g<<sol;
- else
- {
- for(int i=1;i<=K;++i)
- if(NrC[i]==sol&&b[i].C<consum)
- consum=b[i].C,lin=b[i].A,col=b[i].B;
- g<<lin<<' '<<col;
- }
- g.close();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement