Advertisement
a53

masterpiece002_9_MARTIE

a53
Mar 9th, 2018
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.64 KB | None | 0 0
  1. #include <fstream>
  2. #include <cmath>
  3. #define Dmax 505550
  4. using namespace std;
  5. int n,X1,Y1,X2,Y2,vf,Max,a,b,r,st,dr,mij,poz;
  6. float T[Dmax],s[Dmax];
  7.  
  8. int main()
  9. {
  10. ifstream f("masterpiece002.in");
  11. ofstream g("masterpiece002.out");
  12. while(f>>X1>>Y1>>X2>>Y2)
  13. {
  14. a=abs(X2-X1),b=abs(Y2-Y1);
  15. if(b!=0)
  16. do
  17. {
  18. r=a%b;
  19. a=b;
  20. b=r;
  21. }
  22. while(r); /// in final a va fi cel mai mare divizor comun
  23. else
  24. if(a==0) /// pentru a prinde cazul particular in care ambele valori sunt 0
  25. a=-1;
  26. if(a==1||(Y1==Y2&&abs(X2-X1)==1)||(X1==X2&&abs(Y2-Y1)==1)||(X2==X1&&Y2==Y1&&abs(Y1-X1)==1)) /// Daca e segment simplu,
  27. T[n++]=sqrt((X2-X1)*(X2-X1)+(Y2-Y1)*(Y2-Y1)),g<<"n= "<<n<<' '<<X1<<' '<<Y1<<' '<<X2<<' '<<Y2<<' '<<endl; /// calculam distanta si o memoram
  28. }
  29. f.close();
  30. for(int i=1;i<=n;++i)
  31. {
  32. int st=1,dr=vf,mij,poz=0; /// Cautare binara
  33. while(st<=dr)
  34. {
  35. mij=(st+dr)/2;
  36. if(s[mij]<T[i])
  37. st=mij+1;
  38. else
  39. if(s[mij]>T[i])
  40. dr=mij-1,poz=mij;
  41. else
  42. {
  43. poz=mij;
  44. break;
  45. }
  46. }
  47. if(poz==0)
  48. ++vf,s[vf]=T[i],poz=vf;
  49. else
  50. s[poz]=T[i];
  51. if(poz>Max)
  52. Max=poz;
  53. }
  54. ///ofstream g("masterpiece002.out");
  55. g<<Max<<'\n';
  56. for(int i=1;i<=n;++i)
  57. g<<T[i]<<' ';
  58. g<<endl;
  59. g.close();
  60. return 0;
  61. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement