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. int sz;
  194. int pat[12][3];
  195. int ok[12][12];
  196. Modint dp[12];
  197. Modint nx[12];
  198. class Solution{
  199. public:
  200. int numOfWays(int n){
  201. int hCmBdyQB, i;
  202. Modint res = 0;
  203. sz = 0;
  204. for(i=(0);i<(3);i++){
  205. int j;
  206. for(j=(0);j<(3);j++){
  207. int k;
  208. for(k=(0);k<(3);k++){
  209. if(i!=j && j!=k){
  210. pat[sz][0] = i;
  211. pat[sz][1] = j;
  212. pat[sz][2] = k;
  213. sz++;
  214. }
  215. }
  216. }
  217. }
  218. for(i=(0);i<(sz);i++){
  219. int j;
  220. for(j=(0);j<(sz);j++){
  221. int k;
  222. ok[i][j] = 0;
  223. for(k=(0);k<(3);k++){
  224. if(pat[i][k]==pat[j][k]){
  225. goto WYIGIcGE;
  226. }
  227. }
  228. ok[i][j] = 1;
  229. WYIGIcGE:;
  230. }
  231. }
  232. for(i=(0);i<(sz);i++){
  233. dp[i] = 1;
  234. }
  235. for(hCmBdyQB=(0);hCmBdyQB<(n-1);hCmBdyQB++){
  236. for(i=(0);i<(sz);i++){
  237. nx[i] = 0;
  238. }
  239. for(i=(0);i<(sz);i++){
  240. int j;
  241. for(j=(0);j<(sz);j++){
  242. if(ok[i][j]){
  243. nx[j] += dp[i];
  244. }
  245. }
  246. }
  247. for(i=(0);i<(sz);i++){
  248. dp[i] = nx[i];
  249. }
  250. }
  251. for(i=(0);i<(sz);i++){
  252. res += dp[i];
  253. }
  254. return res;
  255. }
  256. }
  257. ;
  258. // cLay varsion 20200419-1
  259.  
  260. // --- original code ---
  261. // #define main dummy_main
  262. // {}
  263. // #undef main
  264. //
  265. // int sz, pat[12][3], ok[12][12];
  266. // Modint dp[12], nx[12];
  267. //
  268. // class Solution {
  269. // public:
  270. // int numOfWays(int n) {
  271. // Modint res = 0;
  272. // sz = 0;
  273. // rep(i,3) rep(j,3) rep(k,3) if(i!=j && j!=k){
  274. // pat[sz][0] = i;
  275. // pat[sz][1] = j;
  276. // pat[sz][2] = k;
  277. // sz++;
  278. // }
  279. // rep(i,sz) rep(j,sz){
  280. // ok[i][j] = 0;
  281. // rep(k,3) if(pat[i][k]==pat[j][k]) break_continue;
  282. // ok[i][j] = 1;
  283. // }
  284. //
  285. // rep(i,sz) dp[i] = 1;
  286. // rep(n-1){
  287. // rep(i,sz) nx[i] = 0;
  288. // rep(i,sz) rep(j,sz) if(ok[i][j]) nx[j] += dp[i];
  289. // rep(i,sz) dp[i] = nx[i];
  290. // }
  291. // rep(i,sz) res += dp[i];
  292. // return res;
  293. // }
  294. // };
  295.  
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