結果
問題 | No.1311 Reverse Permutation Index |
ユーザー | yoshykai |
提出日時 | 2020-12-08 11:49:57 |
言語 | Java (openjdk 23) |
結果 |
AC
|
実行時間 | 53 ms / 1,500 ms |
コード長 | 3,651 bytes |
コンパイル時間 | 2,804 ms |
コンパイル使用メモリ | 81,892 KB |
実行使用メモリ | 50,556 KB |
最終ジャッジ日時 | 2024-09-17 14:33:22 |
合計ジャッジ時間 | 3,742 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 6 |
ソースコード
import java.util.*; import java.io.*; class Main{ public static void main(String args[]){ long n = readLong(); int s=readI(); ArrayList<Integer> list = new ArrayList<Integer>(); for(int i=0;i<s;i++){list.add(i);} int ar[]=new int[s]; long ff=fact(s-1); for(int i=0;i<s;i++){ long t = n/ff; ar[i]=list.get((int)t); list.remove((int)t); n=n%ff; if(i!=s-1){ ff/=(s-i-1); } } int ans[]=new int[s]; for(int i=0;i<s;i++){ ans[ar[i]]=i; } long res=0; list = new ArrayList<Integer>();for(int i=0;i<s;i++){list.add(i);} ff=fact(s-1); for(int i=0;i<s;i++){ int t = list.indexOf(ans[i]); res += t*ff; list.remove(t); if(i!=s-1){ ff/=(s-i-1); } } pl(res+""); } public static long fact(int i){ if(i==1||i==0){ return 1L; } return i*fact(i-1); } public static long gcd(long a,long b){ if(a<b){return gcd(b,a);} long c=a%b; while(c!=0){ a=b;b=c; c=a%b; } return b; } public static boolean next_permutation(int[] a) { for (int i = a.length - 2; i >= 0; i--) { if (a[i] < a[i + 1]) { for (int j = a.length - 1;; j--) { if (a[i] < a[j]) { int temp = a[i]; a[i] = a[j]; a[j] = temp; for (i++, j = a.length - 1; i < j; i++, j--) { temp = a[i]; a[i] = a[j]; a[j] = temp; } return true; } } } } return false; } static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); public static void pr(String str){ System.out.print(str); } public static void pl(String str){ System.out.println(str); } public static String read(){ try{ return ctos((char)br.read()); }catch(IOException e){ e.printStackTrace(); return ""; } } public static char readC(){ try{ return (char)br.read(); }catch(IOException e){ e.printStackTrace(); return (char)-1; } } public static String readL(){ try{ return br.readLine(); }catch(IOException e){ e.printStackTrace(); return ""; } } public static String readS(){ StringBuilder sb = new StringBuilder(); while(true){ try{ int k = br.read(); if(k==-1||(char)k==' '||(char)k=='\n'){break;} sb.append((char)k); }catch(IOException e){ e.printStackTrace(); } } return sb.toString(); } public static int readI(){ return stoi(readS()); } public static long readLong(){ return stol(readS()); } public static long stol(String s){ return Long.parseLong(s); } public static String[] readSs(){ return readL().split(" "); } public static int[] readIs(){ return stoi(readSs()); } public static int stoi(String s){ return Integer.parseInt(s); } public static int[] stoi(String s[]){ int a[]=new int[s.length]; for(int i=0;i<s.length;i++){ a[i]=stoi(s[i]); } return a; } public static String itos(int i){ return String.valueOf(i); } public static String[] itos(int[] a){ String s[]=new String[a.length]; for(int i=0;i<a.length;i++){ s[i]=itos(a[i]); } return s; } public static String ctos(char c){ return String.valueOf(c); } public static String cstos(char[] c){ return new String(c); } public static char stoc(String s){ return s.charAt(0); } public static char[] stocs(String s){ return s.toCharArray(); } }