转载请注明出处
摘要:模拟, 环的处理
PROGRAM NAME:beads
INPUT FORMAT:
第 1 行: N, 珠子的数目
第 2 行: 一串长度为N的字符串, 每个字符是 r , b 或 w。
OUTPUT FORMAT:
单独的一行包含从被供应的项
二. 题解
/* ID: fightin1 LANG: JAVA TASK: beads */ import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.PrintWriter; import java.util.LinkedList; public class beads { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub try { BufferedReader br = new BufferedReader(new FileReader("beads.in")); PrintWriter pw = new PrintWriter (new FileWriter("beads.out")); int length = Integer.parseInt(br.readLine()); String temp = br.readLine(); LinkedList<Character> necklace = new LinkedList<Character>(); for (int i=0;i<length;i++) { necklace.add(temp.charAt(i)); } int max = 0; for (int i=0;i<length;i++) { char remove = necklace.removeFirst(); char first = necklace.getFirst(); int position = 0; necklace.addLast(remove); int result = 0; boolean allW = false; if (necklace.getFirst()=='w'){ int end1 = find(necklace,0,length,0); result = end1 + 1; if (end1<necklace.size()-1){ int end2 = find (necklace,end1+1,length,0); first = necklace.get(end2); position = end2; result = result + end2 - end1; }else { allW = true; } } else { int end = find(necklace,0,length,0); position = end ; result = result + end + 1; } if (!allW){ if (necklace.getLast()=='w') { int end1 = find(necklace, length-1,position,1); int end2 = find(necklace,end1-1,position,1); if (necklace.get(end2)==first){ result = result ; }else { result = result + length - end1; result = result + end1 - end2 ; } }else { if (necklace.getLast()==first){ result = result; }else { int end = find(necklace,length-1,position,1); result = result + length - end ; } } } if (result >=max){ max = result; } } pw.println(max); pw.close(); br.close(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static int find(LinkedList<Character> necklace,int startPoint ,int endPoint,int direction){ if (direction ==0 ){ int i=startPoint+1; for (;i<=endPoint-1;i++){ if (necklace.get(i)!=necklace.get(startPoint)&&necklace.get(i)!='w'){ break; } } return i-1; } else { int i=startPoint-1; for (;i>=endPoint+1;i--){ if (necklace.get(i)!=necklace.get(startPoint)&&necklace.get(i)!='w'){ break; } } return i+1; } } }