Advertisement
Pearlfromsu

Untitled

Nov 15th, 2021
174
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.18 KB | None | 0 0
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.IO;
  5. using System.Linq;
  6. using System.Text;
  7.  
  8. class Nice {
  9.  
  10. static string[] lines;
  11. static int getMn(int ind)
  12. {
  13. int res = 0;
  14. //246
  15. //6
  16. //64
  17. //642 oh no... fixing..
  18. int mn = 1;
  19. for(int i = ind; i>=0; i--)
  20. {
  21. if (Char.IsDigit(lines[1][i]))
  22. res += (int)((int)lines[1][i] - (int)'0') * mn;
  23. else
  24. break;
  25. mn *= 10;
  26. }
  27. return res;
  28. }
  29. static void Main(string[] args) {
  30. lines = File.ReadAllLines("input.txt");
  31. StreamWriter sw = new StreamWriter("output.txt");
  32.  
  33. List<int> plus = new List<int>();
  34. List<int> minus = new List<int>();
  35.  
  36.  
  37. List<int> signs = new List<int>();
  38. int a = int.Parse(lines[0]);
  39. for (int i = 2; i < lines[1].Length; i++)
  40. {
  41. if(lines[1][i] == 'a' && lines[1][i-1] == '+' && lines[1][i-2] == '+' || lines[1][i] == '+' && lines[1][i - 1] == '+' && lines[1][i - 2] == 'a')
  42. {
  43. bool before = lines[1][i] == 'a';
  44. int slag = 1;
  45. if(i > 3)
  46. if(lines[1][i-3] == '*')
  47. slag = getMn(i - 4); //a++
  48.  
  49. //sw.WriteLine(slag + " SLAG ");
  50. if (signs.Count > 0)
  51. {
  52. if (signs[signs.Count - 1] == 1)
  53. plus.Add(before ? slag : -slag);
  54. else
  55. minus.Add(before ? slag : -slag);
  56. } else
  57. plus.Add(before ? slag : -slag);
  58. if (i < lines[1].Length - 1)//сомнительное условие
  59. signs.Add(lines[1][i + 1] == '+' ? 1 : 0);
  60. }
  61. }
  62. int res = 0;
  63.  
  64. //Todo correct sorting
  65. //Сначала все обычные единицы
  66. //потом минус единицы(где ++a)
  67. plus = plus.OrderBy(x => Math.Abs(x)).ToList();
  68. minus = minus.OrderBy(x => Math.Abs(x)).ToList();
  69. int ii = 0;
  70. int ij = plus.Count - 1;
  71. int ji = 0;
  72. int jj = minus.Count - 1;
  73. bool p = false;
  74. while (ii <= ij || ji <= jj)
  75. {
  76. if (a >= 0)
  77. {
  78. if(ji <= jj)
  79. {
  80. if (p) sw.Write(minus[jj] + " m ");
  81. if (minus[jj] > 0)
  82. {
  83. if (p) sw.Write((a + 1) + " AA ");
  84. res = res - (a + 1) * minus[jj];
  85. if (p) sw.WriteLine((a + 1) * minus[jj]);
  86. }
  87. else
  88. {
  89. if (p) sw.Write((a) + " AA ");
  90. res = res - (-a) * minus[jj];
  91. if(p) sw.WriteLine(-a * minus[jj]);
  92. }
  93. jj--;
  94. } else
  95. {
  96. if (p) sw.Write(plus[ii] + " p ");
  97. if (plus[ii] > 0)
  98. {
  99.  
  100. if (p) sw.Write((a + 1) + " AA ");
  101. res = res + (a + 1) * plus[ii];
  102. if (p) sw.WriteLine((a + 1) * plus[ii]);
  103. }
  104. else
  105. {
  106. if (p) sw.Write((a) + " AA ");
  107. res = res + (-a) * plus[ii];
  108. if (p) sw.WriteLine(-a * plus[ii]);
  109. }
  110. ii++;
  111. }
  112. } else
  113. {
  114. if (ji <= jj)
  115. {
  116. if (p) sw.Write(minus[jj] + " m ");
  117. if (minus[jj] > 0)
  118. {
  119. if (p) sw.Write((a + 1) + " AA ");
  120. res = res - (a + 1) * minus[jj];
  121. if (p) sw.WriteLine((a + 1) * minus[jj]);
  122. }
  123. else
  124. {
  125. if (p) sw.Write((a) + " AA ");
  126. res = res - (-a) * minus[jj];
  127. if (p) sw.WriteLine(-a * minus[jj]);
  128. }
  129. jj--;
  130. }
  131. else
  132. {
  133.  
  134. if (p) sw.Write(plus[ii] + " p ");
  135. if (plus[ii] > 0)
  136. {
  137. if (p) sw.Write((a + 1) + " AA ");
  138. res = res + (a + 1) * plus[ii];
  139. if (p) sw.WriteLine((a + 1) * plus[ii]);
  140. }
  141. else
  142. {
  143. if (p) sw.Write((a) + " AA ");
  144. res = res + (-a) * plus[ii];
  145. if (p) sw.WriteLine(-a * plus[ii]);
  146. }
  147. ii++;
  148. }
  149. }
  150.  
  151. a++;
  152. }
  153. /*for (int i = minus.Count - 1; i >= 0; i--)
  154. {
  155. //sw.Write(minus[i] + " ");
  156. if (minus[i] > 0)
  157. {
  158. res -= (a + 1) * minus[i];
  159. //sw.WriteLine((a + 1) * minus[i]);
  160. }
  161. else
  162. {
  163. res -= -a * minus[i];
  164. //sw.WriteLine(-a * minus[i]);
  165. }
  166. a++;
  167. }
  168. //sw.WriteLine("now +:");
  169. for (int i = 0; i < plus.Count; i++)
  170. {
  171. //sw.Write(plus[i] + " ");
  172. if (plus[i] > 0)
  173. {
  174. res += (a + 1) * plus[i];
  175. //sw.WriteLine((a + 1) * plus[i]);
  176. }
  177. else
  178. {
  179. res += -a * plus[i];
  180. //sw.WriteLine(-a * plus[i]);
  181. }
  182. a++;
  183. }*/
  184.  
  185. sw.Write(res);
  186. sw.Close();
  187. }
  188. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement