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. #define main dummy_main
  189. int main(){
  190. return 0;
  191. }
  192. #undef main
  193. Modint cnt[1001][26];
  194. Modint dp[1001];
  195. Modint nx[1001];
  196. class Solution{
  197. public:
  198. int numWays(vector<string>& S, string T){
  199. int i, k;
  200. int N = S.size();
  201. int M = S[0].size();
  202. Modint s;
  203. for(i=(0);i<(N);i++){
  204. int j;
  205. for(j=(0);j<(M);j++){
  206. S[i][j] -= 'a';
  207. }
  208. }
  209. for(i=(0);i<(T.size());i++){
  210. T[i] -= 'a';
  211. }
  212. for(i=(0);i<(M);i++){
  213. int j;
  214. for(j=(0);j<(26);j++){
  215. cnt[i][j] = 0;
  216. }
  217. }
  218. for(i=(0);i<(N);i++){
  219. int j;
  220. for(j=(0);j<(M);j++){
  221. cnt[j][S[i][j]] += 1;
  222. }
  223. }
  224. for(i=(0);i<(M+1);i++){
  225. dp[i] = 0;
  226. }
  227. dp[0] = 1;
  228. for(k=(0);k<(T.size());k++){
  229. {
  230. auto jZyWAPpY = (0);
  231. auto jbtyPBGc = ( dp[0]);
  232. dp[0] = jZyWAPpY;
  233. s = jbtyPBGc;
  234. }
  235. for(i=(0);i<(M);i++){
  236. {
  237. auto AlM5nNnR = (s * cnt[i][T[k]]);
  238. auto XJIcIBrW = ( s + dp[i+1]);
  239. dp[i+1] = AlM5nNnR;
  240. s = XJIcIBrW;
  241. }
  242. }
  243. }
  244. {
  245. int jPV_0s1p;
  246. Modint BUotOFBp;
  247. if(M+1==0){
  248. BUotOFBp = 0;
  249. }
  250. else{
  251. BUotOFBp = dp[0];
  252. for(jPV_0s1p=(1);jPV_0s1p<(M+1);jPV_0s1p++){
  253. BUotOFBp += dp[jPV_0s1p];
  254. }
  255. }
  256. return BUotOFBp;
  257. }
  258. }
  259. }
  260. ;
  261. // cLay varsion 20201031-1
  262.  
  263. // --- original code ---
  264. // #define main dummy_main
  265. // {}
  266. // #undef main
  267. //
  268. // Modint cnt[1001][26];
  269. // Modint dp[1001], nx[1001];
  270. //
  271. // class Solution {
  272. // public:
  273. // int numWays(vector<string>& S, string T) {
  274. // int N = S.size(), M = S[0].size();
  275. // Modint s;
  276. //
  277. // rep(i,N) rep(j,M) S[i][j] -= 'a';
  278. // rep(i,T.size()) T[i] -= 'a';
  279. //
  280. // rep(i,M) rep(j,26) cnt[i][j] = 0;
  281. // rep(i,N) rep(j,M) cnt[j][S[i][j]] += 1;
  282. //
  283. // rep(i,M+1) dp[i] = 0;
  284. // dp[0] = 1;
  285. //
  286. // rep(k,T.size()){
  287. // (dp[0], s) = (0, dp[0]);
  288. // rep(i,M) (dp[i+1], s) = (s * cnt[i][T[k]], s + dp[i+1]);
  289. // }
  290. // return sum(dp(M+1));
  291. // }
  292. // };
  293.  
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