a53

oneout

a53
Apr 10th, 2022
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.14 KB | None | 0 0
  1. #include <fstream>
  2. using namespace std;
  3. int Imax[1000000],J,Jmax[1000000];
  4.  
  5. int main()
  6. {
  7. int c,n;
  8. ifstream fin("oneout.in");
  9. fin>>c>>n;
  10. int a[n+1]; /// Sirul de numere
  11. int Max=0; /// Valoarea maxima din sir
  12. for(int i=1;i<=n;++i)
  13. fin>>a[i],Max=max(a[i],Max);
  14. int nlp[Max+1]; /// Numere libere de patrate
  15. for(int i=1;i<=Max;++i) /// Marcam ca si cum toate sunt libere de patrate
  16. nlp[i]=0;
  17. for(int i=2;i*i<=Max;++i) /// Marcam cu 1 cele ce nu sunt libere de patrate
  18. for(int j=i*i;j<=Max;j+=i*i) /// un ciur asemanator cu Eratostene
  19. nlp[j]=1;
  20. ofstream fout("oneout.out");
  21. if(c==1)
  22. {
  23. int sol=0; /// Solutia
  24. for(int i=1;i<=n;++i)
  25. if(!nlp[a[i]]) /// Daca a[i] e liber de patrate
  26. ++sol; /// incrementam solutia
  27. fout<<sol<<'\n';
  28. }
  29. else
  30. {
  31. int Secv,Smax=0,N=1,I;
  32. for(int i=2;i<n;++i)
  33. if(!nlp[a[i-1]]&&nlp[a[i]]&&!nlp[a[i+1]]) /// a[i-1]=liber de patrate nlp[a[i]]=1 si a[i+1]=liber de patrate
  34. {
  35. Secv=0;
  36. I=i-1; /// Ma deplasez la stanga
  37. while(!nlp[a[I]])
  38. {
  39. ++Secv;
  40. if(I>1)
  41. --I;
  42. else
  43. break;
  44. }
  45. if(nlp[a[I]])
  46. ++I;
  47. J=i+1; /// Ma deplasez la dreapta
  48. while(!nlp[a[J]])
  49. {
  50. ++Secv;
  51. if(J<n)
  52. ++J;
  53. else
  54. break;
  55. }
  56. if(nlp[a[J]])
  57. --J;
  58. if(Secv>=Smax)
  59. {
  60. if(Secv==Smax)
  61. ++N;
  62. else
  63. N=1,Smax=0;
  64. Smax=Secv,Imax[N]=I,Jmax[N]=J;
  65. }
  66. }
  67. fout<<Smax<<' '<<N<<'\n';
  68. for(int i=1;i<=N;++i)
  69. fout<<Imax[i]<<' '<<Jmax[i]<<'\n';
  70. }
  71. return 0;
  72. }
Add Comment
Please, Sign In to add comment