Advertisement
a53

bec

a53
Jan 23rd, 2018
235
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.65 KB | None | 0 0
  1. #include <fstream>
  2. #define Nmax 152
  3. #define Nbecuri 101
  4. using namespace std;
  5. int P,N,M,K,A[Nmax][Nmax];
  6. struct bec
  7. {
  8. int A,B,C; /// Pozitia (A,B) a becului si consumul C
  9. };
  10. bec b[Nbecuri]; /// Becurile
  11. int NrC[Nbecuri]; /// Numarul de copaci luminati de becul i
  12.  
  13. void NrCopaci(int n,int x0,int y0) /// Calculeaza numarul de copaci luminati de becul n
  14. {
  15. /// Se poate demonstra matematic ca lanterna din pozltia (x0,y0) lumineaza pomul
  16. /// din pozitia (x,y) deca si numai daca c.m.m.d.c.(x-x0,y-y0)=1.
  17. /// Prin urmare, este suficient sa numaram cati pomi respecta aceasta conditie.
  18. int a,b,r;
  19. for(int x=1;x<=N;++x)
  20. for(int y=1;y<=M;++y)
  21. {
  22. a=x>x0?x-x0:x0-x;
  23. b=y>y0?y-y0:y0-y;
  24. while(b) /// ca1cu1ez cmmdc
  25. r=a%b,a=b,b=r;
  26. if(A[x][y]==0&&a==1) /// pom luminat
  27. ++NrC[n]; /// deci i1 numar
  28. }
  29. }
  30.  
  31. int main()
  32. {
  33. ifstream f("bec.in");
  34. f>>P>>N>>M>>K;
  35. for(int i=1;i<=K;++i)
  36. f>>b[i].A>>b[i].B>>b[i].C,A[b[i].A][b[i].B]=b[i].C;
  37. f.close();
  38. for(int i=1;i<=K;++i) /// Calculam pentru fiecare bec i numarul de copaci luminati
  39. NrCopaci(i,b[i].A,b[i].B);
  40. int sol=NrC[1],consum=b[1].C,lin=b[1].A,col=b[1].B;
  41. for(int i=2;i<=K;++i)
  42. if(NrC[i]>sol)
  43. sol=NrC[i],consum=b[i].C,lin=b[i].A,col=b[i].B;
  44. ofstream g("bec.out");
  45. if(P==1)
  46. g<<sol;
  47. else
  48. {
  49. for(int i=1;i<=K;++i)
  50. if(NrC[i]==sol&&b[i].C<consum)
  51. consum=b[i].C,lin=b[i].A,col=b[i].B;
  52. g<<lin<<' '<<col;
  53. }
  54. g.close();
  55. return 0;
  56. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement