您的位置:首页 > 其它

UVa 127 Accordian Patience

2015-11-08 16:04 253 查看
import java.io.File;
import java.io.FileNotFoundException;
import java.util.LinkedList;
import java.util.Scanner;

class Stack{
private LinkedList<String> storage = new LinkedList<String>();
public Stack(String str) {
storage.addFirst(str);
}
public void push(String element) {
storage.addFirst(element);
}
public String peek() {
return storage.getFirst();
}
public String pop() {
return storage.removeFirst();
}
public boolean empty() {
return storage.isEmpty();
}
public String toString() {
return Integer.toString(storage.size());
}
}
public class Main{
public static boolean compatible(String a, String b) {
if(a.charAt(0) == b.charAt(0) || a.charAt(1) == b.charAt(1)) return true;
else return false;
}

public static void main(String[] args) throws FileNotFoundException {
Scanner in = new Scanner(System.in);
while(true) {
String tmp1 = in.nextLine();
if(tmp1.equals("#")) break;
String tmp2 = in.nextLine();
tmp1 = tmp1+" "+tmp2;
String[] tmp = tmp1.split(" ");
LinkedList<Stack> piles = new LinkedList<Stack>();
for(String t:tmp)
piles.add(new Stack(t));

int i = 0;
while(i < piles.size()) {
String next3, cur, last1;
cur = piles.get(i).peek();
boolean removed = false;
boolean next3rev = false;
if(i - 3 >= 0) {
next3 = piles.get(i-3).peek();
if(compatible(cur, next3)) {
piles.get(i-3).push(piles.get(i).pop());
if(piles.get(i).empty()) piles.remove(i);
removed = true;
next3rev = true;
}
}
if(i - 1 >= 0 && !next3rev) {
last1 = piles.get(i-1).peek();
if(compatible(cur, last1)) {
piles.get(i-1).push(piles.get(i).pop());
if(piles.get(i).empty()) piles.remove(i);
removed = true;
}
}
if(removed) i= 0;
else {i++;}
}
String ans = "";
for(Stack s: piles)
ans = ans + " " + s;
if(piles.size() == 1)
System.out.println("1 pile remaining:"+ans);
else
System.out.println(piles.size()+" piles remaining:"+ans);

}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: