public object D() { bool IsMatch(string T, string S) { for (int i = 0; i < S.Length - T.Length + 1; i++) { var ok = true; for (int j = 0; j < T.Length; j++) { if (S[i + j] != T[j] && T[j] != '.') { ok = false; } } if (ok) { return(true); } } return(false); } var S = cin.Next(); var C = "abcdefghijklmnopqrstuvwxyz."; var M = new List <string>(); foreach (var item in C) { if (IsMatch(item.ToString(), S)) { M.Add(item.ToString()); } } foreach (var c1 in C) { foreach (var c2 in C) { var T = c1.ToString() + c2.ToString(); if (IsMatch(T, S)) { M.Add(T); } } } foreach (var c1 in C) { foreach (var c2 in C) { foreach (var c3 in C) { var T = c1.ToString() + c2.ToString() + c3.ToString(); if (IsMatch(T, S)) { M.Add(T); } } } } return(M.Count()); }
static void Main() { using var cin = new Scanner(); int n = cin.Int(); string s = cin.Next(); int ans = 0; for (int i = 0; i < n; i++) { string ss = s[i..n];
static void Main() { var sc = new Scanner(); var S = sc.Next(); var N = S.Length; const double mod = 1e9 + 7; var indexes = Enumerable.Range(0, 8).Select(_ => new List <int>()).ToArray(); var counts = new double[8]; for (int i = N - 1; i >= 0; i--) { var item = S[i]; switch (item) { case 'i': counts[7] += 1; break; case 'a': counts[6] = (counts[6] + counts[7]) % mod; break; case 'd': counts[5] = (counts[5] + counts[6]) % mod; break; case 'u': counts[4] = (counts[4] + counts[5]) % mod; break; case 'k': counts[3] = (counts[3] + counts[4]) % mod; break; case 'o': counts[2] = (counts[2] + counts[3]) % mod; break; case 'h': counts[1] = (counts[1] + counts[2]) % mod; break; case 'c': counts[0] = (counts[0] + counts[1]) % mod; break; } } Console.WriteLine(counts[0]); }
static void Main() { using var cin = new Scanner(); var(n, m) = cin.Int2(); var s = new string[n]; for (int i = 0; i < n; i++) { s[i] = cin.Next(); } int num = n * m + 2; int si = n * m; int ti = n * m + 1; var flow = new MFGraph <long, CapLong>(num); for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if (s[i][j] == '#') { continue; } int k = i * m + j; if ((i + j) % 2 == 0) { flow.AddEdge(si, k, 1); Helper.DoAt4(i, j, n, m, (ii, jj) => { if (s[ii][jj] == '.') { int kk = ii * m + jj; flow.AddEdge(k, kk, 1); } }); } else { flow.AddEdge(k, ti, 1); } } } long maxFlow = flow.Flow(si, ti); Console.WriteLine(maxFlow); var ans = new char[n][]; for (int i = 0; i < n; i++) { ans[i] = new char[m]; } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { ans[i][j] = s[i][j]; } } var edges = flow.Edges(); foreach (var e in edges) { if (e.From == si || e.To == ti || e.Flow == 0) { continue; } int i0 = e.From / m; int j0 = e.From % m; int i1 = e.To / m; int j1 = e.To % m; if (i0 == i1 + 1) { ans[i1][j1] = 'v'; ans[i0][j0] = '^'; } else if (j0 == j1 + 1) { ans[i1][j1] = '>'; ans[i0][j0] = '<'; } else if (i0 == i1 - 1) { ans[i0][j0] = 'v'; ans[i1][j1] = '^'; } else { ans[i0][j0] = '>'; ans[i1][j1] = '<'; } } for (int i = 0; i < n; i++) { Console.WriteLine(new string(ans[i])); } }