a53

Sort4

a53
Oct 7th, 2019
249
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.36 KB | None | 0 0
  1. #include <algorithm>
  2. using namespace std;
  3. struct S
  4. {
  5. int x,d,s,p;
  6. bool operator < (const S& e) const
  7. {
  8. if(d!=e.d)
  9. return d>e.d;
  10. if(s!= e.s)
  11. return s<e.s;
  12. if(p!=e.p)
  13. return p<e.p;
  14. return x<e.x;
  15. }
  16. };
  17.  
  18. class InParser {
  19. private:
  20. FILE *fin;
  21. char *buff;
  22. int sp;
  23. char read_ch() {
  24. ++sp;
  25. if (sp == 4096) {
  26. sp = 0;
  27. fread(buff, 1, 4096, fin);
  28. }
  29. return buff[sp];
  30. }
  31. public:
  32. InParser(const char* nume) {
  33. fin = fopen(nume, "r");
  34. buff = new char[4096]();
  35. sp = 4095;
  36. }
  37. InParser& operator >> (int &n) {
  38. char c;
  39. while (!isdigit(c = read_ch()) && c != '-');
  40. int sgn = 1;
  41. if (c == '-') {
  42. n = 0;
  43. sgn = -1;
  44. } else {
  45. n = c - '0';
  46. }
  47. while (isdigit(c = read_ch())) {
  48. n = 10 * n + c - '0';
  49. }
  50. n *= sgn;
  51. return *this;
  52. }
  53. };
  54. class OutParser {
  55. private:
  56. FILE *fout;
  57. char *buff;
  58. int sp;
  59. void write_ch(char ch) {
  60. if (sp == 50000) {
  61. fwrite(buff, 1, 50000, fout);
  62. sp = 0;
  63. buff[sp++] = ch;
  64. } else {
  65. buff[sp++] = ch;
  66. }
  67. }
  68. public:
  69. OutParser(const char* name) {
  70. fout = fopen(name, "w");
  71. buff = new char[50000]();
  72. sp = 0;
  73. }
  74. ~OutParser() {
  75. fwrite(buff, 1, sp, fout);
  76. fclose(fout);
  77. }
  78. OutParser& operator << (int vu32) {
  79. if (vu32 <= 9) {
  80. write_ch(vu32 + '0');
  81. } else {
  82. (*this) << (vu32 / 10);
  83. write_ch(vu32 % 10 + '0');
  84. }
  85. return *this;
  86. }
  87. OutParser& operator << (char ch) {
  88. write_ch(ch);
  89. return *this;
  90. }
  91. OutParser& operator << (const char *ch) {
  92. while (*ch) {
  93. write_ch(*ch);
  94. ++ch;
  95. }
  96. return *this;
  97. }
  98. };
  99.  
  100. void nr_cif_sum_prod(int n,int &ncd,int &s,int &p)
  101. {
  102. int c,cif[10]={0};
  103. ncd=0,s=0,p=1;
  104. while(n)
  105. c=n%10,cif[c]=1,s+=c,p*=c,n/=10;
  106. for(int i=0;i<10;++i)
  107. if(cif[i])
  108. ++ncd;
  109. }
  110.  
  111. int main()
  112. {
  113. int n;
  114. InParser f("sort4.in");
  115. f>>n;
  116. S a[n];
  117. for(int i=0;i<n;++i)
  118. f>>a[i].x,nr_cif_sum_prod(a[i].x,a[i].d,a[i].s,a[i].p);
  119. sort(a,a+n);
  120. OutParser g("sort4.out");
  121. for(int i=0;i<n;++i)
  122. g<<a[i].x<<' ';
  123. return 0;
  124. }
Advertisement
Add Comment
Please, Sign In to add comment