Skip to content

Instantly share code, notes, and snippets.

@phonism
Last active December 24, 2015 18:29
Show Gist options
  • Save phonism/6843700 to your computer and use it in GitHub Desktop.
Save phonism/6843700 to your computer and use it in GitHub Desktop.
LightOJ 1023 - Discovering Permutations http://lightoj.com/volume_showproblem.php?problem=1023 第k个排列
import java.io.BufferedReader;
import java.io.IOError;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.StringTokenizer;
public class P1023 {
boolean nextPermutation(int[] p, int st, int ed) {
for (int a = ed - 2; a >= st; a--) {
if (p[a] < p[a + 1]) {
for (int b = ed - 1;; b--) {
if (p[b] > p[a]) {
int t = p[a];
p[a] = p[b];
p[b] = t;
for (a++, b = ed - 1; a < b; a++, b--) {
t = p[a];
p[a] = p[b];
p[b] = t;
}
return true;
}
}
}
}
return false;
}
public void run() {
Scanner cin = new Scanner(System.in);
PrintWriter cout = new PrintWriter(new OutputStreamWriter(System.out));
int test = cin.nextInt();
for (int cas = 1; cas <= test; cas++) {
int n = cin.nextInt();
int m = cin.nextInt();
int[] a = new int[n];
for (int i = 0; i < n; i++)
a[i] = i;
int cnt = 0;
cout.println("Case " + cas + ":");
do {
cnt++;
for (int i = 0; i < n; i++)
cout.print((char)(a[i] + 'A'));
cout.println("");
if (cnt == m)
break;
} while (nextPermutation(a, 0, n));
}
cout.flush();
}
public static void main(String args[]) {
new P1023().run();
}
class Scanner {
BufferedReader br;
StringTokenizer st;
Scanner(InputStream in) {
br = new BufferedReader(new InputStreamReader(in));
eat("");
}
void eat(String s) {
st = new StringTokenizer(s);
}
String nextLine() {
try {
return br.readLine();
} catch (IOException e) {
throw new IOError(e);
}
}
boolean hasNext() {
while (!st.hasMoreTokens()) {
String s = nextLine();
if (s == null)
return false;
eat(s);
}
return true;
}
String next() {
hasNext();
return st.nextToken();
}
int nextInt() {
return Integer.parseInt(next());
}
long nextLong() {
return Long.parseLong(next());
}
double nextDouble() {
return Double.parseDouble(next());
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment