fork download
  1. #pragma GCC optimize ("Ofast")
  2. #include<bits/stdc++.h>
  3. using namespace std;
  4. #define MD (1000000007U)
  5. struct Modint{
  6. unsigned val;
  7. Modint(){
  8. val=0;
  9. }
  10. Modint(int a){
  11. val = ord(a);
  12. }
  13. Modint(unsigned a){
  14. val = ord(a);
  15. }
  16. Modint(long long a){
  17. val = ord(a);
  18. }
  19. Modint(unsigned long long a){
  20. val = ord(a);
  21. }
  22. inline unsigned ord(unsigned a){
  23. return a%MD;
  24. }
  25. inline unsigned ord(int a){
  26. a %= (int)MD;
  27. if(a < 0){
  28. a += MD;
  29. }
  30. return a;
  31. }
  32. inline unsigned ord(unsigned long long a){
  33. return a%MD;
  34. }
  35. inline unsigned ord(long long a){
  36. a %= (int)MD;
  37. if(a < 0){
  38. a += MD;
  39. }
  40. return a;
  41. }
  42. inline unsigned get(){
  43. return val;
  44. }
  45. inline Modint &operator+=(Modint a){
  46. val += a.val;
  47. if(val >= MD){
  48. val -= MD;
  49. }
  50. return *this;
  51. }
  52. inline Modint &operator-=(Modint a){
  53. if(val < a.val){
  54. val = val + MD - a.val;
  55. }
  56. else{
  57. val -= a.val;
  58. }
  59. return *this;
  60. }
  61. inline Modint &operator*=(Modint a){
  62. val = ((unsigned long long)val*a.val)%MD;
  63. return *this;
  64. }
  65. inline Modint &operator/=(Modint a){
  66. return *this *= a.inverse();
  67. }
  68. inline Modint operator+(Modint a){
  69. return Modint(*this)+=a;
  70. }
  71. inline Modint operator-(Modint a){
  72. return Modint(*this)-=a;
  73. }
  74. inline Modint operator*(Modint a){
  75. return Modint(*this)*=a;
  76. }
  77. inline Modint operator/(Modint a){
  78. return Modint(*this)/=a;
  79. }
  80. inline Modint operator+(int a){
  81. return Modint(*this)+=Modint(a);
  82. }
  83. inline Modint operator-(int a){
  84. return Modint(*this)-=Modint(a);
  85. }
  86. inline Modint operator*(int a){
  87. return Modint(*this)*=Modint(a);
  88. }
  89. inline Modint operator/(int a){
  90. return Modint(*this)/=Modint(a);
  91. }
  92. inline Modint operator+(long long a){
  93. return Modint(*this)+=Modint(a);
  94. }
  95. inline Modint operator-(long long a){
  96. return Modint(*this)-=Modint(a);
  97. }
  98. inline Modint operator*(long long a){
  99. return Modint(*this)*=Modint(a);
  100. }
  101. inline Modint operator/(long long a){
  102. return Modint(*this)/=Modint(a);
  103. }
  104. inline Modint operator-(void){
  105. Modint res;
  106. if(val){
  107. res.val=MD-val;
  108. }
  109. else{
  110. res.val=0;
  111. }
  112. return res;
  113. }
  114. inline operator bool(void){
  115. return val!=0;
  116. }
  117. inline operator int(void){
  118. return get();
  119. }
  120. inline operator long long(void){
  121. return get();
  122. }
  123. inline Modint inverse(){
  124. int a = val;
  125. int b = MD;
  126. int u = 1;
  127. int v = 0;
  128. int t;
  129. Modint res;
  130. while(b){
  131. t = a / b;
  132. a -= t * b;
  133. swap(a, b);
  134. u -= t * v;
  135. swap(u, v);
  136. }
  137. if(u < 0){
  138. u += MD;
  139. }
  140. res.val = u;
  141. return res;
  142. }
  143. inline Modint pw(unsigned long long b){
  144. Modint a(*this);
  145. Modint res;
  146. res.val = 1;
  147. while(b){
  148. if(b&1){
  149. res *= a;
  150. }
  151. b >>= 1;
  152. a *= a;
  153. }
  154. return res;
  155. }
  156. inline bool operator==(int a){
  157. return ord(a)==val;
  158. }
  159. inline bool operator!=(int a){
  160. return ord(a)!=val;
  161. }
  162. }
  163. ;
  164. inline Modint operator+(int a, Modint b){
  165. return Modint(a)+=b;
  166. }
  167. inline Modint operator-(int a, Modint b){
  168. return Modint(a)-=b;
  169. }
  170. inline Modint operator*(int a, Modint b){
  171. return Modint(a)*=b;
  172. }
  173. inline Modint operator/(int a, Modint b){
  174. return Modint(a)/=b;
  175. }
  176. inline Modint operator+(long long a, Modint b){
  177. return Modint(a)+=b;
  178. }
  179. inline Modint operator-(long long a, Modint b){
  180. return Modint(a)-=b;
  181. }
  182. inline Modint operator*(long long a, Modint b){
  183. return Modint(a)*=b;
  184. }
  185. inline Modint operator/(long long a, Modint b){
  186. return Modint(a)/=b;
  187. }
  188. template<class S, class T> inline S chmax(S &a, T b){
  189. if(a<b){
  190. a=b;
  191. }
  192. return a;
  193. }
  194. #define main dummy_main
  195. int main(){
  196. return 0;
  197. }
  198. #undef main
  199. int X;
  200. int Y;
  201. int mx[100][100];
  202. Modint cnt[100][100];
  203. void ren(int &mx, Modint &cnt, int a, Modint b){
  204. if(mx < a){
  205. mx = a;
  206. cnt = 0;
  207. }
  208. if(mx == a){
  209. cnt += b;
  210. }
  211. }
  212. class Solution{
  213. public:
  214. vector<int> pathsWithMaxScore(vector<string>& S){
  215. int i;
  216. X = S.size();
  217. Y = S[0].size();
  218. S[0][0] = '0';
  219. mx[X-1][Y-1] = 0;
  220. cnt[X-1][Y-1] = 1;
  221. for(i=(X)-1;i>=(0);i--){
  222. int j;
  223. for(j=(Y)-1;j>=(0);j--){
  224. if(S[i][j]=='S'){
  225. continue;
  226. }
  227. if(S[i][j]=='X'){
  228. mx[i][j] = -1073709056;
  229. cnt[i][j] = 0;
  230. continue;
  231. }
  232. mx[i][j] = -1073709056;
  233. cnt[i][j] = 0;
  234. if(i+1 < X){
  235. ren(mx[i][j], cnt[i][j], mx[i+1][j]+S[i][j]-'0', cnt[i+1][j]);
  236. }
  237. if(j+1 < Y){
  238. ren(mx[i][j], cnt[i][j], mx[i][j+1]+S[i][j]-'0', cnt[i][j+1]);
  239. }
  240. if(i+1 < X && j+1 < Y){
  241. ren(mx[i][j], cnt[i][j], mx[i+1][j+1]+S[i][j]-'0', cnt[i+1][j+1]);
  242. }
  243. }
  244. }
  245. chmax(mx[0][0], 0);
  246. return vector<int>{mx[0][0], (int)cnt[0][0]};
  247. }
  248. }
  249. ;
  250. // cLay varsion 20200217-1
  251.  
  252. // --- original code ---
  253. // #define main dummy_main
  254. // {}
  255. // #undef main
  256. //
  257. // int X, Y, mx[100][100];
  258. // Modint cnt[100][100];
  259. //
  260. // void ren(int &mx, Modint &cnt, int a, Modint b){
  261. // if(mx < a) mx = a, cnt = 0;
  262. // if(mx == a) cnt += b;
  263. // }
  264. //
  265. // class Solution {
  266. // public:
  267. // vector<int> pathsWithMaxScore(vector<string>& S) {
  268. // X = S.size();
  269. // Y = S[0].size();
  270. // S[0][0] = '0';
  271. //
  272. // mx[X-1][Y-1] = 0;
  273. // cnt[X-1][Y-1] = 1;
  274. // rrep(i,X) rrep(j,Y){
  275. // if(S[i][j]=='S') continue;
  276. // if(S[i][j]=='X') mx[i][j] = -int_inf, cnt[i][j] = 0, continue;
  277. // mx[i][j] = -int_inf;
  278. // cnt[i][j] = 0;
  279. //
  280. // if(i+1 < X) ren(mx[i][j], cnt[i][j], mx[i+1][j]+S[i][j]-'0', cnt[i+1][j]);
  281. // if(j+1 < Y) ren(mx[i][j], cnt[i][j], mx[i][j+1]+S[i][j]-'0', cnt[i][j+1]);
  282. // if(i+1 < X && j+1 < Y) ren(mx[i][j], cnt[i][j], mx[i+1][j+1]+S[i][j]-'0', cnt[i+1][j+1]);
  283. // }
  284. //
  285. // mx[0][0] >?= 0;
  286. // return vector<int>{mx[0][0], (int)cnt[0][0]};
  287. // }
  288. // };
  289.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/Scrt1.o: in function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status
stdout
Standard output is empty