fork download
  1. #pragma GCC optimize ("Ofast")
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4. template<class S, class T> inline S min_L(S a,T b){
  5. return a<=b?a:b;
  6. }
  7. template<class S, class T> inline S max_L(S a,T b){
  8. return a>=b?a:b;
  9. }
  10. inline int my_getchar_unlocked(){
  11. static char buf[1048576];
  12. static int s = 1048576;
  13. static int e = 1048576;
  14. if(s == e && e == 1048576){
  15. e = fread_unlocked(buf, 1, 1048576, stdin);
  16. s = 0;
  17. }
  18. if(s == e){
  19. return EOF;
  20. }
  21. return buf[s++];
  22. }
  23. inline void rd(char &c){
  24. int i;
  25. for(;;){
  26. i = my_getchar_unlocked();
  27. if(i!=' '&&i!='\n'&&i!='\r'&&i!='\t'&&i!=EOF){
  28. break;
  29. }
  30. }
  31. c = i;
  32. }
  33. inline int rd(char c[]){
  34. int i;
  35. int sz = 0;
  36. for(;;){
  37. i = my_getchar_unlocked();
  38. if(i!=' '&&i!='\n'&&i!='\r'&&i!='\t'&&i!=EOF){
  39. break;
  40. }
  41. }
  42. c[sz++] = i;
  43. for(;;){
  44. i = my_getchar_unlocked();
  45. if(i==' '||i=='\n'||i=='\r'||i=='\t'||i==EOF){
  46. break;
  47. }
  48. c[sz++] = i;
  49. }
  50. c[sz]='\0';
  51. return sz;
  52. }
  53. struct MY_WRITER{
  54. char buf[1048576];
  55. int s;
  56. int e;
  57. MY_WRITER(){
  58. s = 0;
  59. e = 1048576;
  60. }
  61. ~MY_WRITER(){
  62. if(s){
  63. fwrite_unlocked(buf, 1, s, stdout);
  64. }
  65. }
  66. }
  67. ;
  68. MY_WRITER MY_WRITER_VAR;
  69. void my_putchar_unlocked(int a){
  70. if(MY_WRITER_VAR.s == MY_WRITER_VAR.e){
  71. fwrite_unlocked(MY_WRITER_VAR.buf, 1, MY_WRITER_VAR.s, stdout);
  72. MY_WRITER_VAR.s = 0;
  73. }
  74. MY_WRITER_VAR.buf[MY_WRITER_VAR.s++] = a;
  75. }
  76. inline void wt_L(char a){
  77. my_putchar_unlocked(a);
  78. }
  79. inline void wt_L(const char c[]){
  80. int i=0;
  81. for(i=0;c[i]!='\0';i++){
  82. my_putchar_unlocked(c[i]);
  83. }
  84. }
  85. int N;
  86. char S[1000000+2];
  87. int ress;
  88. char res[5000000];
  89. void aster(void){
  90. res[ress++] = '*';
  91. res[ress++] = '*';
  92. }
  93. int main(){
  94. int i = 0;
  95. int j;
  96. int val;
  97. int nx;
  98. int bst = 0;
  99. int x;
  100. int y;
  101. int xy;
  102. int arr[12] = {0, 0, 5, 4, 3, 3, 3, 3, 3, 3, 3, 2};
  103. N = rd(S);
  104. for(;;){
  105. j = i;
  106. if(bst==0 && j+1 < N && i==j && S[i]=='1'){
  107. j++;
  108. }
  109. while(j+1 < N && S[j+1]=='0'){
  110. j++;
  111. }
  112. val = S[i] - '0';
  113. if(j > i){
  114. val =min_L(11, val * 10 + S[i+1] - '0');
  115. }
  116. if(j > i+1){
  117. val = 11;
  118. }
  119. if(bst){
  120. val = 11;
  121. }
  122. while(i <= j){
  123. res[ress++] = S[i++];
  124. }
  125. if(i >= N){
  126. break;
  127. }
  128. bst = 1;
  129. if(N - i > 2){
  130. aster();
  131. bst = 0;
  132. continue;
  133. }
  134. if(N - i == 2){
  135. x = S[i] - '0';
  136. y = S[i+1] - '0';
  137. xy =max_L(10*x+y, pow(x,y));
  138. if(pow(val,xy) > pow(val*10+x, y)){
  139. aster();
  140. bst = 0;
  141. }
  142. }
  143. if(N - i == 1){
  144. if(arr[val] <= S[i] - '0'){
  145. aster();
  146. bst = 0;
  147. }
  148. }
  149. }
  150. wt_L(res);
  151. wt_L('\n');
  152. return 0;
  153. }
  154. // cLay varsion 20201102-1
  155.  
  156. // --- original code ---
  157. // int N;
  158. // char S[1d6+2];
  159. // int ress; char res[5d6];
  160. //
  161. // void aster(void){
  162. // res[ress++] = '*';
  163. // res[ress++] = '*';
  164. // }
  165. //
  166. // {
  167. // int i = 0, j, val, nx, bst = 0, x, y, xy;
  168. // int arr[12] = {0, 0, 5, 4, 3, 3, 3, 3, 3, 3, 3, 2};
  169. // rd(S@N);
  170. // for(;;){
  171. // j = i;
  172. // if(bst==0 && j+1 < N && i==j && S[i]=='1') j++;
  173. // while(j+1 < N && S[j+1]=='0') j++;
  174. //
  175. // val = S[i] - '0';
  176. // if(j > i) val = min(11, val * 10 + S[i+1] - '0');
  177. // if(j > i+1) val = 11;
  178. // if(bst) val = 11;
  179. // while(i <= j) res[ress++] = S[i++];
  180. // if(i >= N) break;
  181. //
  182. // bst = 1;
  183. //
  184. // if(N - i > 2) aster(), bst = 0, continue;
  185. // if(N - i == 2){
  186. // x = S[i] - '0';
  187. // y = S[i+1] - '0';
  188. // xy = max(10*x+y, pow(x,y));
  189. // if(pow(val,xy) > pow(val*10+x, y)) aster(), bst = 0;
  190. // }
  191. // if(N - i == 1){
  192. // if(arr[val] <= S[i] - '0') aster(), bst = 0;
  193. // }
  194. // }
  195. // wt(res);
  196. // }
  197.  
Time limit exceeded #stdin #stdout 5s 4524KB
stdin
Standard input is empty
stdout
Standard output is empty