[13458]試験監督


🔗 質問リンク


https://www.acmicpc.net/problem/13458

🔍 問題の説明


全部でN個の試験場があり、試験場ごとに受験者がいる.i番試験場の受験者はAi名です.
監督員には総監と副監督の2種類がある.監督試験者が1つの試験場で監視できる受験者はB名、副監督者が1つの試験場で監視できる受験者はC名である.
各試験場には監督が1人しかいないので、いくつかの副監督試験があります.
試験場ごとに受験生を監視しなければならない.この場合、必要な監督人数の最大値を求めるプログラムを作成してください.

⚠▼制限


  • 1行目は試験場の個数N(1≦N≦1000000)を与える.

  • 2行目は各試験場の受験者数Ai(1≦Ai≦1000000)を与える.

  • 3行目はBとCです.(1 ≤ B, C ≤ 1,000,000)
  • 🗝 プール(言語:Java)


    三星(サムスン)ソフトウェアパワーテスト機の出題が容易に見える問題だ.でも正解率26%は皮肉
    整数範囲がintの場合は必ず溢れ出すのでlongと宣言します.主監督員は一人でなければならず、残りは副監督員が処理し、部と余数で一度に正しい答えを計算しなければならない.
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.util.StringTokenizer;
    
    public class Main {
        public static long countSupervisor(String[] studentNum, int main, int sub) {
            long answer = 0;
            for (String n : studentNum) {
                // 주 감독관 처리 후
                long afterMain = Integer.parseInt(n) - main;
                answer++;
                // 주 감독관 혼자 처리 가능
                if (afterMain <= 0)
                    continue;
                // 부 감독관 처리
                answer += (afterMain / sub);
                answer += (afterMain % sub == 0) ? 0 : 1;
            }
            return answer;
        }
    
        public static void main(String[] args) throws IOException {
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            Integer.parseInt(br.readLine());
            String[] studentNum = br.readLine().split(" ");
            StringTokenizer st = new StringTokenizer(br.readLine());
            int main = Integer.parseInt(st.nextToken()), sub = Integer.parseInt(st.nextToken());
            System.out.print(countSupervisor(studentNum, main, sub));
        }
    }