結果
問題 | No.1927 AB-CD |
ユーザー |
![]() |
提出日時 | 2022-05-06 22:17:01 |
言語 | Java (openjdk 23) |
結果 |
AC
|
実行時間 | 142 ms / 2,000 ms |
コード長 | 9,898 bytes |
コンパイル時間 | 2,630 ms |
コンパイル使用メモリ | 81,756 KB |
実行使用メモリ | 49,324 KB |
最終ジャッジ日時 | 2024-07-05 23:32:28 |
合計ジャッジ時間 | 7,243 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 27 |
ソースコード
import java.util.*;import java.io.*;public class Main {static ContestScanner sc = new ContestScanner(System.in);static PrintWriter pw = new PrintWriter(System.out);static StringBuilder sb = new StringBuilder();static long mod = 998244353;static Combination comb = new Combination(400000);public static void main(String[] args) throws Exception {//int T = sc.nextInt();//for(int i = 0; i < T; i++)solve();solve();pw.flush();}public static void solve() {int n = sc.nextInt();char[] s = sc.next().toCharArray();int cnt = 0;for(char c : s){if(c-'A' <= 1){cnt++;}}pw.println(comb.comb(n,cnt));}static class GeekInteger {public static void save_sort(int[] array) {shuffle(array);Arrays.sort(array);}public static int[] shuffle(int[] array) {int n = array.length;Random random = new Random();for (int i = 0, j; i < n; i++) {j = i + random.nextInt(n - i);int randomElement = array[j];array[j] = array[i];array[i] = randomElement;}return array;}public static void save_sort(long[] array) {shuffle(array);Arrays.sort(array);}public static long[] shuffle(long[] array) {int n = array.length;Random random = new Random();for (int i = 0, j; i < n; i++) {j = i + random.nextInt(n - i);long randomElement = array[j];array[j] = array[i];array[i] = randomElement;}return array;}}}class Combination {final static long mod = 998244353;private static long[] fact, ifact;public Combination(int n) {fact = new long[n + 1];ifact = new long[n + 1];fact[0] = 1;long ln = n;for (long i = 1; i <= ln; ++i) {int ii = (int) i;fact[ii] = fact[ii - 1] % mod * i % mod;}ifact[n] = pow(fact[n], this.mod - 2);for (int i = n; i >= 1; --i) {int ii = (int) i;ifact[ii - 1] = ifact[ii] % mod * i % mod;}}public static long comb(int n, int k) {if (k < 0 || k > n)return 0;return fact[n] % mod * ifact[k] % mod * ifact[n - k] % mod;}public static long perm(int n, int k) {return comb(n, k) * fact[k] % mod;}public static long pow(long a, long b) {long ret = 1;long tmp = a;while (b > 0) {if ((b & 1) == 1) {ret = (ret * tmp) % mod;}tmp = (tmp * tmp) % mod;b = b >> 1;}return ret;}}/*** refercence : https://github.com/NASU41/AtCoderLibraryForJava/blob/master/ContestIO/ContestScanner.java*/class ContestScanner {private final java.io.InputStream in;private final byte[] buffer = new byte[1024];private int ptr = 0;private int buflen = 0;private static final long LONG_MAX_TENTHS = 922337203685477580L;private static final int LONG_MAX_LAST_DIGIT = 7;private static final int LONG_MIN_LAST_DIGIT = 8;public ContestScanner(java.io.InputStream in){this.in = in;}public ContestScanner(java.io.File file) throws java.io.FileNotFoundException {this(new java.io.BufferedInputStream(new java.io.FileInputStream(file)));}public ContestScanner(){this(System.in);}private boolean hasNextByte() {if (ptr < buflen) {return true;}else{ptr = 0;try {buflen = in.read(buffer);} catch (java.io.IOException e) {e.printStackTrace();}if (buflen <= 0) {return false;}}return true;}private int readByte() {if (hasNextByte()) return buffer[ptr++]; else return -1;}private static boolean isPrintableChar(int c) {return 33 <= c && c <= 126;}public boolean hasNext() {while(hasNextByte() && !isPrintableChar(buffer[ptr])) ptr++;return hasNextByte();}public String next() {if (!hasNext()) throw new java.util.NoSuchElementException();StringBuilder sb = new StringBuilder();int b = readByte();while(isPrintableChar(b)) {sb.appendCodePoint(b);b = readByte();}return sb.toString();}public long nextLong() {if (!hasNext()) throw new java.util.NoSuchElementException();long n = 0;boolean minus = false;int b = readByte();if (b == '-') {minus = true;b = readByte();}if (b < '0' || '9' < b) {throw new NumberFormatException();}while (true) {if ('0' <= b && b <= '9') {int digit = b - '0';if (n >= LONG_MAX_TENTHS) {if (n == LONG_MAX_TENTHS) {if (minus) {if (digit <= LONG_MIN_LAST_DIGIT) {n = -n * 10 - digit;b = readByte();if (!isPrintableChar(b)) {return n;} else if (b < '0' || '9' < b) {throw new NumberFormatException(String.format("%d%s... is not number", n, Character.toString(b)));}}} else {if (digit <= LONG_MAX_LAST_DIGIT) {n = n * 10 + digit;b = readByte();if (!isPrintableChar(b)) {return n;} else if (b < '0' || '9' < b) {throw new NumberFormatException(String.format("%d%s... is not number", n, Character.toString(b)));}}}}throw new ArithmeticException(String.format("%s%d%d... overflows long.", minus ? "-" : "", n, digit));}n = n * 10 + digit;}else if(b == -1 || !isPrintableChar(b)){return minus ? -n : n;}else{throw new NumberFormatException();}b = readByte();}}public int nextInt() {long nl = nextLong();if (nl < Integer.MIN_VALUE || nl > Integer.MAX_VALUE) throw new NumberFormatException();return (int) nl;}public double nextDouble() {return Double.parseDouble(next());}public long[] nextLongArray(int length){long[] array = new long[length];for(int i=0; i<length; i++) array[i] = this.nextLong();return array;}public long[] nextLongArray(int length, java.util.function.LongUnaryOperator map){long[] array = new long[length];for(int i=0; i<length; i++) array[i] = map.applyAsLong(this.nextLong());return array;}public int[] nextIntArray(int length){int[] array = new int[length];for(int i=0; i<length; i++) array[i] = this.nextInt();return array;}public int[] nextIntArray(int length, java.util.function.IntUnaryOperator map){int[] array = new int[length];for(int i=0; i<length; i++) array[i] = map.applyAsInt(this.nextInt());return array;}public double[] nextDoubleArray(int length){double[] array = new double[length];for(int i=0; i<length; i++) array[i] = this.nextDouble();return array;}public double[] nextDoubleArray(int length, java.util.function.DoubleUnaryOperator map){double[] array = new double[length];for(int i=0; i<length; i++) array[i] = map.applyAsDouble(this.nextDouble());return array;}public long[][] nextLongMatrix(int height, int width){long[][] mat = new long[height][width];for(int h=0; h<height; h++) for(int w=0; w<width; w++){mat[h][w] = this.nextLong();}return mat;}public int[][] nextIntMatrix(int height, int width){int[][] mat = new int[height][width];for(int h=0; h<height; h++) for(int w=0; w<width; w++){mat[h][w] = this.nextInt();}return mat;}public double[][] nextDoubleMatrix(int height, int width){double[][] mat = new double[height][width];for(int h=0; h<height; h++) for(int w=0; w<width; w++){mat[h][w] = this.nextDouble();}return mat;}public char[][] nextCharMatrix(int height, int width){char[][] mat = new char[height][width];for(int h=0; h<height; h++){String s = this.next();for(int w=0; w<width; w++){mat[h][w] = s.charAt(w);}}return mat;}}