速度雖然比前一個人快一點,但是花的記憶體卻是快五倍...
import java.util.LinkedList; public class JAVA { // 輸入緩衝區 (緩衝空間需要依照題目調整) public static byte[] cinbuf = new byte[1024]; // 讀取一個單字 (英文姓名包含空白時請不要用) public static String readToken() { int offset = 0; int bytedata = -1; try { // 略過非單字的字元 '\t','\n','\r',' ' bytedata = System.in.read(); while(bytedata==9||bytedata==10||bytedata==13||bytedata==32) { bytedata = System.in.read(); } // 載入單字的字元 while(bytedata!=-1) { if(bytedata==9||bytedata==10||bytedata==13||bytedata==32) { break; } else { cinbuf[offset++] = (byte)bytedata; } bytedata = System.in.read(); } } catch(Exception e) {} if(offset+bytedata==-1) return null; // 串流結束 return new String(cinbuf,0,offset); } // 讀取一行 public static String readLine() { int offset = 0; int bytedata = -1; try { // 載入整行 bytedata = System.in.read(); while(bytedata!=-1) { if(bytedata==10) { break; } else { cinbuf[offset++] = (byte)bytedata; } bytedata = System.in.read(); } } catch(Exception e) {} if(offset+bytedata==-1) return null; // 串流結束 if(cinbuf[offset-1]=='\r') offset--; // window 要去除 '\r' 字元 return new String(cinbuf,0,offset); } // 轉成 int 型態 (比 Integer.parseInt() 快) public static int parseInt(String s) { int i; int mul = 10; int value = s.charAt(s.length()-1)-48; for(i=s.length()-2;i>=0;i--) { value += (s.charAt(i)-48)*mul; mul *= 10; } return value; } public static void main(String[] args) { int testCase = parseInt(readLine()); for(int i = 0; i < testCase; i++) { int days = parseInt(readLine()); boolean[] calendar = new boolean[days+1]; int parties = parseInt(readLine()); LinkedList<Integer> partiesList = new LinkedList<Integer>(); for(int j = 0; j < parties; j++) { Integer tmp = parseInt(readLine()); partiesList.add(tmp); } // start processing. for(int j = 0; j < partiesList.size(); j++) { int now_party = partiesList.get(j); if(now_party == 0) continue; for(int k = 1; k < calendar.length; k++) { if(k % now_party == 0) { calendar[k] = true; } } } int count = 0; // start counting strike days on non-yasumi day for(int j = 1; j < calendar.length; j++) { if(!isYasumi(j) && calendar[j] == true) { count++; } } System.out.println(count); } } public static boolean isYasumi(int day) { // first day is Sunday if(day == 0) return true; // Sunday if(day % 7 == 0) return true; // Saturday while(day > 7) { day -= 7; } if(day == 6) return true; return false; } }
No comments:
Post a Comment