Submission #726456

#TimeUsernameProblemLanguageResultExecution timeMemory
726456jnjwnwnwJob Scheduling (CEOI12_jobs)Java
0 / 100
1087 ms65536 KiB
import java.util.*; import java.io.*; public class jobs { private class Pair{ int ind, v; public Pair(int index, int val){ this.ind = index; this.v = val; } } private int n, d, m; private int[][] arr; private int[] toDoPerDay; public static void main(String[] args) throws IOException{ new jobs(); } public jobs() throws IOException{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer sc = new StringTokenizer(br.readLine()); n = Integer.parseInt(sc.nextToken()); d = Integer.parseInt(sc.nextToken()); m = Integer.parseInt(sc.nextToken()); arr = new int[m][2]; toDoPerDay = new int[n+1]; int k; sc = new StringTokenizer(br.readLine()); for (int i = 0; i < m; i++) { arr[i] = new int[]{i, k = Integer.parseInt(sc.nextToken())}; toDoPerDay[k]++;} br.close(); Arrays.sort(arr, (a, b) -> a[1]-b[1]); int lb = 0, ub = m, mid; while (lb < ub){ mid = (lb+ub)/2; if (works(mid)){ub = mid;} else{lb = mid+1;} } System.out.println(lb); int j = 0; for(int i = 0; i < n; i++){ int end = Math.min(m, j + lb); for(; j < end; j++){ if (arr[j][1] > i+1){break;} System.out.print(arr[j][0] + 1 + " "); } System.out.println(0); } } public boolean works(int numMachines){ // int done = 0; // for(int days = 1; days<=(n-d); days++){ // int end = Math.min(m, done+numMachines); // for (;done<end;done++){ // if (arr[done][1] > days){ // break; // } // } // } return (done==m); int toDo = 0; for(int i = 1; i <= (n-d); i++){ toDo += toDoPerDay[i]; toDo = Math.max(0, toDo-numMachines); } return (toDo == 0); } }
#Verdict Execution timeMemoryGrader output
Fetching results...