Advertisement
a53

nkgraf

a53
Feb 9th, 2020
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.02 KB | None | 0 0
  1. //Em. Cerchez 100
  2. #include <fstream>
  3. #define LGMAX 300
  4. #define NMAX 900
  5. using namespace std;
  6. ifstream fin("nkgraf.in");
  7. ofstream fout("nkgraf.out");
  8. typedef char NrMare[LGMAX];
  9. struct arc {int x, y;};
  10. void Afisare(NrMare x, int lgx);
  11. void Suma(NrMare x, int lgx, NrMare y, int lgy, NrMare z, int& lgz);
  12. void Zero(NrMare x, int st, int dr);
  13. void combinari();
  14. void arce();
  15. void genereaza();
  16. void afiseaza_sol();
  17. int N, K, P, cerinta, n, lp, lc;
  18. NrMare C[2][NMAX];
  19. int lg[2][NMAX];
  20. int sol[NMAX*NMAX];
  21. arc a[NMAX*NMAX];
  22.  
  23. int main()
  24. {
  25. fin>>cerinta>>N>>K>>P;
  26. n=N*(N-1);
  27. if (cerinta==1)
  28. {
  29. combinari();
  30. Afisare(C[lp][K],lg[lp][K]);
  31. }
  32. else
  33. {arce();
  34. genereaza();
  35. afiseaza_sol();
  36. }
  37. fout.close();
  38. return 0;
  39. }
  40.  
  41. void Afisare(NrMare x, int lgx)
  42. {int i;
  43. for (i=lgx-1; i>=0; i--) fout<<(int)x[i];
  44. fout<<'\n';
  45. }
  46.  
  47. void Suma(NrMare x, int lgx, NrMare y, int lgy, NrMare z, int& lgz)
  48. {int i, t, rez;
  49. if (lgx<lgy) {lgz=lgy; Zero(x,lgx,lgy);}
  50. else {lgz=lgx; Zero(y,lgy,lgx);}
  51. for (i=t=0; i<lgz; i++ )
  52. {
  53. rez=x[i]+y[i]+t;
  54. z[i]=rez%10;
  55. t=rez/10;
  56. }
  57. if (t) z[lgz++]=t;
  58. }
  59.  
  60. void Zero(NrMare x, int st, int dr)
  61. { int i;
  62. for (i=st; i<dr; i++) x[i]=0;
  63. }
  64.  
  65. void combinari()
  66. {int i, j;
  67. lp=0, lc=1;
  68. C[0][0][0]=1;lg[0][0]=1; C[0][1][0]=1; lg[0][1]=1; C[1][0][0]=1; lg[1][0]=1;
  69. for (i=2; i<=n; i++)
  70. {
  71. for (j=1; j<i; j++)
  72. Suma(C[lp][j],lg[lp][j], C[lp][j-1], lg[lp][j-1], C[lc][j], lg[lc][j]);
  73. C[lc][i][0]=1; lg[lc][i]=1;
  74. lp=1-lp; lc=1-lc;
  75. }
  76. }
  77.  
  78. void genereaza()
  79. {int i, j;
  80. for (i=1; i<=K; i++) sol[i]=i;
  81. for (j=2; j<=P; j++)
  82. {///succesor
  83. for (i=K; sol[i]==n-K+i; i--);
  84. sol[i]++;
  85. for (i++; i<=K; i++) sol[i]=1+sol[i-1];
  86. }
  87. }
  88.  
  89. void arce()
  90. {int i, j, nr=0;
  91. for (i=1; i<=N; i++)
  92. for (j=1; j<=N; j++)
  93. if (i!=j) {++nr; a[nr].x=i; a[nr].y=j;}
  94. }
  95.  
  96. void afiseaza_sol()
  97. {int i;
  98. for (i=1; i<=K; i++)
  99. fout<<a[sol[i]].x<<' '<<a[sol[i]].y<<'\n';
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement