Thursday, September 13, 2012

USACO: Barn Repair

Problem: Link.
Solution:
Code:


/*
 ID: ***
 LANG: JAVA
 TASK: barn1
 */

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.StringTokenizer;

class Gap implements Comparable<Gap> {
    int start, end;

    Gap(int s, int e) {
        start = s;
        end = e;
    }

    public int compareTo(Gap o) {
        return o.getSize() - getSize();
    }

    public int getSize() {
        return end - start - 1;
    }

} // Gap class

public class barn1 {

    public static void main(String[] args) throws IOException {

        BufferedReader f = new BufferedReader(new FileReader("barn1.in"));
        PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(
                "barn1.out")));

        StringTokenizer st = new StringTokenizer(f.readLine());
        int m = Integer.parseInt(st.nextToken());
        int s = Integer.parseInt(st.nextToken());
        int c = Integer.parseInt(st.nextToken());
        int boards, stallsCovered;

        int[] stalls = new int[c];
        List<Gap> gaps = new ArrayList<Gap>();

        for (int i = 0; i < c; i++)
            stalls[i] = Integer.parseInt(f.readLine());

        Arrays.sort(stalls);

        for (int i = 1; i < c; i++) {
            if (stalls[i] - stalls[i - 1] > 1) {
                gaps.add(new Gap(stalls[i - 1], stalls[i]));
            }
        }
        Collections.sort(gaps);

        stallsCovered = stalls[c - 1] - stalls[0] + 1;
        for (int i = 0; i < gaps.size() && i < m - 1; i++) {
            stallsCovered -= gaps.get(i).getSize();
        }

        out.println(stallsCovered);

        out.close();
        System.exit(0);
    }
}