import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
public class Osmos {
public static String caseString
= "Case #?: ";
List<String> arrayList = new ArrayList<String>();
while((line = br.readLine()) != null) {
if(!line.trim().equalsIgnoreCase("")) {
arrayList.add(line);
}
}
return arrayList.
toArray(new String[0]); }
for (int i = 0; i < content.length; i++) {
String caseS
= caseString.
replace("?",
(i
+1)+""); bw.append(caseS+content[i]+"\n");
}
bw.flush();
bw.close();
}
String inputfile
= "/Users/sumitkumar/Desktop/codejam/1/A-large-practice.in"; String outputfile
= "/Users/sumitkumar/Desktop/codejam/1/A-large-practice.out"; String[] input
= read
(inputfile
); int testCases
= Integer.
parseInt(input
[0]); int counter = 1;
System.
out.
println("testCases ::"+testCases
); for (int i = 0; i < testCases; i++) {
String [] line1
= input
[counter
++].
split(" "); int yourBot
= Integer.
parseInt(line1
[0]); int botsCount
= Integer.
parseInt(line1
[1]); String [] botsString
= input
[counter
++].
split(" "); int [] bots = new int[botsCount];
for (int j = 0; j < botsCount; j++) {
bots
[j
] = Integer.
parseInt(botsString
[j
]); }
output[i] = solve(yourBot, bots, botsCount);
}
write(outputfile, output);
}
private static String solve
(int yourBot,
int[] bots,
int botsCount
) { sort(bots, botsCount);
int myBot = yourBot;
int change = 0;
int i = 0;
for (i = 0; i < botsCount; i++) {
if(myBot > bots[i]) {
myBot += bots[i];
continue;
}
if((2*myBot-1) > bots[i]) {
myBot = 2*myBot-1 + bots[i];
change++;
continue;
}
break;
}
int changesWithoutAddition = changesWithoutAddition(myBot, bots, i, botsCount);
int changesWithAddition = -1;
if(i < botsCount)
changesWithAddition = changesWithAddition(myBot, bots, i, botsCount);
int min = changesWithoutAddition;
if(changesWithAddition >= 0) {
min = (changesWithoutAddition < changesWithAddition) ? changesWithoutAddition : changesWithAddition;
}
change+=min;
return change+"";
}
private static int changesWithoutAddition(int myBot, int bots[], int index, int botsCount) {
System.
out.
println("changesWithoutAddition"+index
); return botsCount-index;
}
private static int changesWithAddition(int myBot, int bots[], int index, int botsCount) {
System.
out.
println("changesWithAddition"+index
); int tempBot = myBot;
int counter = 0;
while(bots[index] >= tempBot) {
tempBot = 2*tempBot - 1;
counter++;
if(counter >= (botsCount-index)) {
return -1;
}
}
for (int i = index; i < botsCount; i++) {
if(tempBot > bots[i]) {
tempBot += bots[i];
continue;
}
if((2*tempBot-1) > bots[i]) {
tempBot = 2*tempBot-1 + bots[i];
counter++;
continue;
}
int changesWithoutAddition = changesWithoutAddition(tempBot, bots, i, botsCount);
int changesWithAddition = -1;
if(i < botsCount)
changesWithAddition = changesWithAddition(tempBot, bots, i, botsCount);
int min = changesWithoutAddition;
if(changesWithAddition >= 0) {
min = (changesWithoutAddition < changesWithAddition) ? changesWithoutAddition : changesWithAddition;
}
counter+=min;
break;
}
return counter;
}
public static void sort(int[] values, int size) {
if (values ==null || size==0){
return ;
}
quicksort(0, size - 1, values);
}
private static void quicksort(int low, int high,int[] numbers) {
int i = low, j = high;
int pivot = numbers[low + (high-low)/2];
while (i <= j) {
while (numbers[i] < pivot) {
i++;
}
while (numbers[j] > pivot) {
j--;
}
if (i <= j) {
exchange(i, j, numbers);
i++;
j--;
}
}
if (low < j)
quicksort(low, j, numbers);
if (i < high)
quicksort(i, high,numbers);
}
private static void exchange(int i, int j, int[] numbers) {
int temp = numbers[i];
numbers[i] = numbers[j];
numbers[j] = temp;
}
}
aW1wb3J0IGphdmEuaW8uQnVmZmVyZWRSZWFkZXI7CmltcG9ydCBqYXZhLmlvLkJ1ZmZlcmVkV3JpdGVyOwppbXBvcnQgamF2YS5pby5GaWxlUmVhZGVyOwppbXBvcnQgamF2YS5pby5QcmludFdyaXRlcjsKaW1wb3J0IGphdmEudXRpbC5BcnJheUxpc3Q7CmltcG9ydCBqYXZhLnV0aWwuTGlzdDsKCnB1YmxpYyBjbGFzcyBPc21vcyB7CiAgICAKICAgIHB1YmxpYyBzdGF0aWMgU3RyaW5nIGNhc2VTdHJpbmcgPSAiQ2FzZSAjPzogIjsKICAgIAogICAgcHVibGljIHN0YXRpYyBTdHJpbmdbXSByZWFkKFN0cmluZyBmaWxlKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICBCdWZmZXJlZFJlYWRlciBiciA9IG5ldyBCdWZmZXJlZFJlYWRlcihuZXcgRmlsZVJlYWRlcihmaWxlKSk7CiAgICAgICAgU3RyaW5nIGxpbmUgPSBudWxsOwogICAgICAgIExpc3Q8U3RyaW5nPiBhcnJheUxpc3QgPSBuZXcgQXJyYXlMaXN0PFN0cmluZz4oKTsKICAgICAgICB3aGlsZSgobGluZSA9IGJyLnJlYWRMaW5lKCkpICE9IG51bGwpICB7CiAgICAgICAgICAgIGlmKCFsaW5lLnRyaW0oKS5lcXVhbHNJZ25vcmVDYXNlKCIiKSkgewogICAgICAgICAgICAgICAgYXJyYXlMaXN0LmFkZChsaW5lKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gYXJyYXlMaXN0LnRvQXJyYXkobmV3IFN0cmluZ1swXSk7CiAgICB9CiAgICAKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCB3cml0ZShTdHJpbmcgZmlsZSwgU3RyaW5nW10gY29udGVudCkgdGhyb3dzIEV4Y2VwdGlvbiB7CiAgICAgICAgQnVmZmVyZWRXcml0ZXIgYncgPSBuZXcgQnVmZmVyZWRXcml0ZXIobmV3IFByaW50V3JpdGVyKGZpbGUpKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNvbnRlbnQubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgU3RyaW5nIGNhc2VTID0gY2FzZVN0cmluZy5yZXBsYWNlKCI/IiwgKGkrMSkrIiIpOwogICAgICAgICAgICBidy5hcHBlbmQoY2FzZVMrY29udGVudFtpXSsiXG4iKTsKICAgICAgICB9CiAgICAgICAgYncuZmx1c2goKTsKICAgICAgICBidy5jbG9zZSgpOwogICAgfQogICAgCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgbWFpbihTdHJpbmdbXSBhcmdzKSB0aHJvd3MgRXhjZXB0aW9uIHsKICAgICAgICBTdHJpbmcgaW5wdXRmaWxlID0gIi9Vc2Vycy9zdW1pdGt1bWFyL0Rlc2t0b3AvY29kZWphbS8xL0EtbGFyZ2UtcHJhY3RpY2UuaW4iOwogICAgICAgIFN0cmluZyBvdXRwdXRmaWxlID0gIi9Vc2Vycy9zdW1pdGt1bWFyL0Rlc2t0b3AvY29kZWphbS8xL0EtbGFyZ2UtcHJhY3RpY2Uub3V0IjsKICAgICAgICBTdHJpbmdbXSBpbnB1dCA9IHJlYWQoaW5wdXRmaWxlKTsKICAgICAgICBpbnQgdGVzdENhc2VzID0gSW50ZWdlci5wYXJzZUludChpbnB1dFswXSk7CiAgICAgICAgU3RyaW5nW10gb3V0cHV0ID0gbmV3IFN0cmluZ1t0ZXN0Q2FzZXNdOwogICAgICAgIGludCBjb3VudGVyID0gMTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oInRlc3RDYXNlcyA6OiIrdGVzdENhc2VzKTsKICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IHRlc3RDYXNlczsgaSsrKSB7CiAgICAgICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihpKTsKICAgICAgICAgICAgU3RyaW5nIFtdIGxpbmUxID0gaW5wdXRbY291bnRlcisrXS5zcGxpdCgiICIpOwogICAgICAgICAgICBpbnQgeW91ckJvdCA9IEludGVnZXIucGFyc2VJbnQobGluZTFbMF0pOwogICAgICAgICAgICBpbnQgYm90c0NvdW50ID0gSW50ZWdlci5wYXJzZUludChsaW5lMVsxXSk7CiAgICAgICAgICAgIFN0cmluZyBbXSBib3RzU3RyaW5nID0gaW5wdXRbY291bnRlcisrXS5zcGxpdCgiICIpOwogICAgICAgICAgICBpbnQgW10gYm90cyA9IG5ldyBpbnRbYm90c0NvdW50XTsKICAgICAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBib3RzQ291bnQ7IGorKykgewogICAgICAgICAgICAgICAgYm90c1tqXSA9IEludGVnZXIucGFyc2VJbnQoYm90c1N0cmluZ1tqXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgb3V0cHV0W2ldID0gc29sdmUoeW91ckJvdCwgYm90cywgYm90c0NvdW50KTsKICAgICAgICB9IAogICAgICAgIHdyaXRlKG91dHB1dGZpbGUsIG91dHB1dCk7CiAgICB9CiAgICAKICAgIHByaXZhdGUgc3RhdGljIFN0cmluZyBzb2x2ZShpbnQgeW91ckJvdCwgaW50W10gYm90cywgaW50IGJvdHNDb3VudCkgewogICAgICAgIHNvcnQoYm90cywgYm90c0NvdW50KTsKICAgICAgICBpbnQgbXlCb3QgPSB5b3VyQm90OwogICAgICAgIGludCBjaGFuZ2UgPSAwOwogICAgICAgIGludCBpID0gMDsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYm90c0NvdW50OyBpKyspIHsKICAgICAgICAgICAgaWYobXlCb3QgPiBib3RzW2ldKSB7CiAgICAgICAgICAgICAgICBteUJvdCArPSBib3RzW2ldOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYoKDIqbXlCb3QtMSkgPiBib3RzW2ldKSB7CiAgICAgICAgICAgICAgICBteUJvdCA9IDIqbXlCb3QtMSArIGJvdHNbaV07CiAgICAgICAgICAgICAgICBjaGFuZ2UrKzsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGJyZWFrOyAKICAgICAgICB9CiAgICAgICAgaW50IGNoYW5nZXNXaXRob3V0QWRkaXRpb24gPSBjaGFuZ2VzV2l0aG91dEFkZGl0aW9uKG15Qm90LCBib3RzLCBpLCBib3RzQ291bnQpOwogICAgICAgIGludCBjaGFuZ2VzV2l0aEFkZGl0aW9uID0gLTE7CiAgICAgICAgaWYoaSA8IGJvdHNDb3VudCkKICAgICAgICAgICAgY2hhbmdlc1dpdGhBZGRpdGlvbiA9IGNoYW5nZXNXaXRoQWRkaXRpb24obXlCb3QsIGJvdHMsIGksIGJvdHNDb3VudCk7CiAgICAgICAgaW50IG1pbiA9IGNoYW5nZXNXaXRob3V0QWRkaXRpb247CiAgICAgICAgaWYoY2hhbmdlc1dpdGhBZGRpdGlvbiA+PSAwKSB7CiAgICAgICAgICAgIG1pbiA9IChjaGFuZ2VzV2l0aG91dEFkZGl0aW9uIDwgY2hhbmdlc1dpdGhBZGRpdGlvbikgPyBjaGFuZ2VzV2l0aG91dEFkZGl0aW9uIDogY2hhbmdlc1dpdGhBZGRpdGlvbjsKICAgICAgICB9CiAgICAgICAgY2hhbmdlKz1taW47CiAgICAgICAgcmV0dXJuIGNoYW5nZSsiIjsKICAgIH0KICAgIAogICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNoYW5nZXNXaXRob3V0QWRkaXRpb24oaW50IG15Qm90LCBpbnQgYm90c1tdLCBpbnQgaW5kZXgsIGludCBib3RzQ291bnQpIHsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNoYW5nZXNXaXRob3V0QWRkaXRpb24iK2luZGV4KTsKICAgICAgICByZXR1cm4gYm90c0NvdW50LWluZGV4OwogICAgfQogICAgcHJpdmF0ZSBzdGF0aWMgaW50IGNoYW5nZXNXaXRoQWRkaXRpb24oaW50IG15Qm90LCBpbnQgYm90c1tdLCBpbnQgaW5kZXgsIGludCBib3RzQ291bnQpIHsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oImNoYW5nZXNXaXRoQWRkaXRpb24iK2luZGV4KTsKICAgICAgICBpbnQgdGVtcEJvdCA9IG15Qm90OwogICAgICAgIGludCBjb3VudGVyID0gMDsKICAgICAgICB3aGlsZShib3RzW2luZGV4XSA+PSB0ZW1wQm90KSB7CiAgICAgICAgICAgIHRlbXBCb3QgPSAyKnRlbXBCb3QgLSAxOwogICAgICAgICAgICBjb3VudGVyKys7CiAgICAgICAgICAgIGlmKGNvdW50ZXIgPj0gKGJvdHNDb3VudC1pbmRleCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmb3IgKGludCBpID0gaW5kZXg7IGkgPCBib3RzQ291bnQ7IGkrKykgewogICAgICAgICAgICBpZih0ZW1wQm90ID4gYm90c1tpXSkgewogICAgICAgICAgICAgICAgdGVtcEJvdCArPSBib3RzW2ldOwogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYoKDIqdGVtcEJvdC0xKSA+IGJvdHNbaV0pIHsKICAgICAgICAgICAgICAgIHRlbXBCb3QgPSAyKnRlbXBCb3QtMSArIGJvdHNbaV07CiAgICAgICAgICAgICAgICBjb3VudGVyKys7CiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpbnQgY2hhbmdlc1dpdGhvdXRBZGRpdGlvbiA9IGNoYW5nZXNXaXRob3V0QWRkaXRpb24odGVtcEJvdCwgYm90cywgaSwgYm90c0NvdW50KTsKICAgICAgICAgICAgaW50IGNoYW5nZXNXaXRoQWRkaXRpb24gPSAtMTsKICAgICAgICAgICAgaWYoaSA8IGJvdHNDb3VudCkKICAgICAgICAgICAgICAgIGNoYW5nZXNXaXRoQWRkaXRpb24gPSBjaGFuZ2VzV2l0aEFkZGl0aW9uKHRlbXBCb3QsIGJvdHMsIGksIGJvdHNDb3VudCk7CiAgICAgICAgICAgIGludCBtaW4gPSBjaGFuZ2VzV2l0aG91dEFkZGl0aW9uOwogICAgICAgICAgICBpZihjaGFuZ2VzV2l0aEFkZGl0aW9uID49IDApIHsKICAgICAgICAgICAgICAgIG1pbiA9IChjaGFuZ2VzV2l0aG91dEFkZGl0aW9uIDwgY2hhbmdlc1dpdGhBZGRpdGlvbikgPyBjaGFuZ2VzV2l0aG91dEFkZGl0aW9uIDogY2hhbmdlc1dpdGhBZGRpdGlvbjsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb3VudGVyKz1taW47IAogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNvdW50ZXI7CiAgICB9CiAgICAKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBzb3J0KGludFtdIHZhbHVlcywgaW50IHNpemUpIHsKICAgICAgICBpZiAodmFsdWVzID09bnVsbCB8fCBzaXplPT0wKXsKICAgICAgICAgIHJldHVybiA7CiAgICAgICAgfQogICAgICAgIHF1aWNrc29ydCgwLCBzaXplIC0gMSwgdmFsdWVzKTsKICAgICAgfQoKICAgICAgcHJpdmF0ZSBzdGF0aWMgdm9pZCBxdWlja3NvcnQoaW50IGxvdywgaW50IGhpZ2gsaW50W10gbnVtYmVycykgewogICAgICAgIGludCBpID0gbG93LCBqID0gaGlnaDsKICAgICAgICBpbnQgcGl2b3QgPSBudW1iZXJzW2xvdyArIChoaWdoLWxvdykvMl07CiAgICAgICAgd2hpbGUgKGkgPD0gaikgewogICAgICAgICAgd2hpbGUgKG51bWJlcnNbaV0gPCBwaXZvdCkgewogICAgICAgICAgICBpKys7CiAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAobnVtYmVyc1tqXSA+IHBpdm90KSB7CiAgICAgICAgICAgIGotLTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChpIDw9IGopIHsKICAgICAgICAgICAgZXhjaGFuZ2UoaSwgaiwgbnVtYmVycyk7CiAgICAgICAgICAgIGkrKzsKICAgICAgICAgICAgai0tOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAobG93IDwgaikKICAgICAgICAgIHF1aWNrc29ydChsb3csIGosIG51bWJlcnMpOwogICAgICAgIGlmIChpIDwgaGlnaCkKICAgICAgICAgIHF1aWNrc29ydChpLCBoaWdoLG51bWJlcnMpOwogICAgICB9CgogICAgICBwcml2YXRlIHN0YXRpYyB2b2lkIGV4Y2hhbmdlKGludCBpLCBpbnQgaiwgaW50W10gbnVtYmVycykgewogICAgICAgIGludCB0ZW1wID0gbnVtYmVyc1tpXTsKICAgICAgICBudW1iZXJzW2ldID0gbnVtYmVyc1tqXTsKICAgICAgICBudW1iZXJzW2pdID0gdGVtcDsKICAgICAgfQoKfQo=