提出詳細
ソースコード
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.Collections;
import java.util.Queue;
public class JumpingCarp {
public static void main(String[] args) {
// TODO Auto-generated method stub
File inFile = new File("E.txt");
BufferedReader reader = null;
FileReader fr = null;
File outFile = new File("result.txt");
BufferedWriter writer = null;
FileWriter fw = null;
try {
// リーダ生成
fr = new FileReader(inFile);
reader = new BufferedReader(fr);
// ライター生成
fw = new FileWriter(outFile);
writer = new BufferedWriter(fw);
// テストケース数を読み込み
int testCaseNum = Integer.parseInt(reader.readLine());
// テストケース毎に計算、出力
for (int i = 1; i <= testCaseNum; i++) {
String caseNumStr = "Case #" + i + ":";
String[] inputs = reader.readLine().split(" ");
int threshold = Integer.parseInt(inputs[0]);
int foodNum = Integer.parseInt(inputs[1]);
Integer[] foodCPArray = new Integer[foodNum];
boolean[] isUsedFoodArray = new boolean[foodNum];
String[] foodCPStrArray = reader.readLine().split(" ");
for (int j = 0; j < foodCPArray.length; j++) {
foodCPArray[j] = Integer.parseInt(foodCPStrArray[j]);
isUsedFoodArray[j] = false;
}
Arrays.sort(foodCPArray, Collections.reverseOrder());
Integer highJumpingCarp = 0;
Queue<Integer> usedFood = new ArrayDeque<Integer>();
for (int j = 0; j < foodNum; j++) {
if (isUsedFoodArray[j])
continue;
int sumCP = foodCPArray[j];
if (sumCP >= threshold) {
highJumpingCarp++;
isUsedFoodArray[j] = true;
} else {
for(int k = foodNum-1 ; k >= 0 ; k--) {
if(isUsedFoodArray[k]) continue;
sumCP += foodCPArray[k];
usedFood.add(k);
if(sumCP > threshold) {
highJumpingCarp++;
Integer foodID;
while((foodID = usedFood.poll()) != null)
isUsedFoodArray[foodID] = true;
break;
}
}
usedFood.clear();
}
}
// 標準出力
System.out.println(caseNumStr);
System.out.println(highJumpingCarp);
// テキストファイルとして書き込み処理
writer.write(caseNumStr);
writer.newLine();
writer.write(highJumpingCarp.toString());
writer.newLine();
}
// テキストファイルをフラッシュ
writer.flush();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
// 各IOインスタンスのクローズ処理
try {
if (reader != null)
reader.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (reader != null)
writer.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (fr != null)
fr.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
if (reader != null)
fw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
提出情報
提出出力結果
テストケース情報