Codeforces Round #491 (Div. 2) E - Bus Number + 反思
生活随笔
收集整理的這篇文章主要介紹了
Codeforces Round #491 (Div. 2) E - Bus Number + 反思
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
E - Bus Number
最近感覺打CF各種車禍。。。。。感覺要反思一下,
上次讀錯題,這次想當然地以為18!肯定暴了longlong 而沒有去實踐,
這個題我看到就感覺是枚舉每個數字的個數,但是我覺得算得時候會爆longlong
就想用大數,但是我去看別人交的全部都是C++,就感覺是不是有別的方法,
想了半天感覺時間來不及了就強行上了個java,結果時間來不及。。。
以后寫題首先要讀清楚題目,其次不要想當然,要去實踐!!!!!!!!!!! 真的很煩。
import java.math.BigInteger; import java.util.*; public class Main {static long n;static int cnt[] = new int[10];static int num[] = new int[10];static long f[] = new long[20];static long ans = 0;static long one = 1000000000;static long base = one * one;public static void main(String arg[]) {f[0] = 1;for(int i = 1; i <= 18; i++) {f[i] = f[i - 1] * i;}Scanner in = new Scanner(System.in);n = in.nextLong();if(n == base) {System.out.println("18");} else {while(n > 0) {int ret = (int)(n % 10);cnt[ret]++;n /= 10;}for(int i = 0; i < 10; i++) {if(cnt[i] > 0) {num[i] = 1;cnt[i]--;}}dfs(0);System.out.println(ans);}in.close();}public static void dfs(int p) {//System.out.println("#####");ans += cal();for(int i = p; i <= 9; i++) {if(cnt[i] == 0) continue;cnt[i]--;num[i]++;dfs(i);num[i]--;cnt[i]++;}}public static long cal() {int sum = 0;long ans = 0, ret = 0;for(int i = 0; i <= 9; i++) sum += num[i];ans = f[sum];for(int i = 0; i <= 9; i++) {if(num[i] > 0)ans /= f[num[i]];}if(num[0] > 0) {ret = f[sum - 1];ret /= f[num[0] - 1];for(int i = 1; i <= 9; i++) {if(num[i] > 0) {ret /= f[num[i]];}}}return ans - ret;} }?
轉載于:https://www.cnblogs.com/CJLHY/p/9220407.html
總結
以上是生活随笔為你收集整理的Codeforces Round #491 (Div. 2) E - Bus Number + 反思的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android Intent基本使用
- 下一篇: shell编程中如何执行oracle语句