intmain(){ cin >> n; for (int i = 0; i < n; ++i) { v[i] = i+1; } do { for (int i = 0; i < n; ++i) { printf("%5d", v[i]); } printf("\n"); } while (next_permutation(v, v+n)); return0; }
intmain(){ cin >> n >> r; for (int i = r; i < n; ++i) { v[i] = 1; } do { for (int i = 0; i < n; ++i) { if (v[i] == 0) printf("%3d", i+1); } printf("\n"); } while (next_permutation(v, v+n)); return0; }
intmain(){ int n, m; cin >> n >> m; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { char ch; cin >> ch; cnt[i][ch]++; } } int ans = INT_MAX; // 枚举蓝色行的起止 for (int i = 1; i < n; ++i) { for (int j = i; j < n-1; ++j) { int cost = 0; for (int k = 0; k < i; ++k) cost += m - cnt[k]['W']; for (int k = i; k <= j; ++k) cost += m - cnt[k]['B']; for (int k = j+1; k < n; ++k) cost += m - cnt[k]['R']; ans = min(ans, cost); } } cout << ans << endl; return0; }
boolcheck(int x, int y, int dx, int dy){ int nx = x, ny = y; for (int i = 0; i < k; i++) { if (nx >= n || ny >= m) returnfalse; if (tu[nx][ny] == '#') returnfalse; nx += dx; ny += dy; } returntrue; }
intmain(){ ios::sync_with_stdio(false); cin >> n >> m >> k; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cin >> tu[i][j]; } } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (check(i, j, 1, 0)) ans++; if (check(i, j, 0, 1)) ans++; } } if (k == 1) ans /= 2; cout << ans << endl; return0; }
unordered_map<int, int> cnt; int n, x, maxv; longlong ans;
// 从 a 个数中选 2 个数的组合数 longlongC(longlong a){ return a * (a - 1) / 2; }
intmain(){ ios::sync_with_stdio(false); cin >> n; for (int i = 0; i < n; i++) { cin >> x; cnt[x]++; maxv = max(maxv, x); } for (int a = 1; a <= maxv; a++) { for (int b = a; b <= maxv; b++) { if (a == b && cnt[a] < 2) continue; int c = a + b; if (cnt[c] >= 2) { longlong base = C(cnt[c]) % MOD; if (a == b) base = base * C(cnt[a]) % MOD; else base = base * ((cnt[a] * cnt[b]) % MOD) % MOD; ans = (ans + base) % MOD; } } } cout << ans << endl; return0; }
string add(string a, string b){ int len_a = a.length(); int len_b = b.length(); int len_max = max(len_a, len_b); int carry = 0; string ret = ""; for (int i = 0; i < len_max; i++) { int num_a = i < len_a ? a[len_a - i - 1] - '0' : 0; int num_b = i < len_b ? b[len_b - i - 1] - '0' : 0; int sum = num_a + num_b + carry; ret = to_string(sum % 10) + ret; carry = sum / 10; } if (carry > 0) ret = to_string(carry) + ret; return ret; }
string dfs(int n, int m){ if (n > m) return"0"; if (n == m) return"1"; if (record[n][m] != "") return record[n][m]; return record[n][m] = add(dfs(n+1, m), dfs(n+2, m)); }
intmain(){ int n, m; cin >> n >> m; cout << dfs(n, m) << endl; return0; }