Submission #70198

#TimeUsernameProblemLanguageResultExecution timeMemory
70198model_codeLottery (CEOI18_lot)Java
80 / 100
2736 ms33792 KiB
import java.util.ArrayList; import java.util.Collections; import java.util.StringTokenizer; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.IOException; public class lottery { public static final int maxN = 10010; public static final int maxQ = 100; public static int[] t; public static int n, l, q; public static class Query implements Comparable<Query> { public int k, i; Query(int k_, int i_) { k = k_; i = i_; } public int compareTo(Query o) { if (k == o.k) return 0; return (k < o.k) ? -1 : 1; } } public static ArrayList<Query> quests; public static int[] cnt; public static int[][] ans; public static int[] dp; public static int count_diff(int x, int y) { int diff = 0; if (x > 0 && y > 0 && t[x - 1] != t[y - 1]) diff--; if (t[x + l - 1] != t[y + l - 1]) diff++; if (x == 0 || y == 0) { for (int i = 1; i < l; i++) diff += (t[x + i - 1] != t[y + i - 1]) ? 1 : 0; } return diff; } public static void ans_quests(int x) { for (int i = 0; i <= l; i++) cnt[i] = 0; for (int i = n - l; i > 0; i--) dp[i] = dp[i - 1] + count_diff(x, i); dp[0] = count_diff(x, 0); for (int i = 0; i < n - l + 1; i++) cnt[dp[i]]++; int k = 0, sum = 0; for (int i = 0; i < quests.size(); i++) { Query q = quests.get(i); while (k <= q.k) { sum += cnt[k]; k++; } ans[q.i][x] = sum - 1; } } public static void main(String[] args) throws IOException { t = new int[maxN]; quests = new ArrayList<Query>(); cnt = new int[maxN]; ans = new int[maxQ][maxN]; for (int i = 0; i < maxQ; i++) ans[i] = new int[maxN]; dp = new int[maxN]; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st; st = new StringTokenizer(br.readLine()); n = Integer.parseInt(st.nextToken()); l = Integer.parseInt(st.nextToken()); st = new StringTokenizer(br.readLine()); for (int i = 0; i < n; i++) t[i] = Integer.parseInt(st.nextToken()); st = new StringTokenizer(br.readLine()); q = Integer.parseInt(st.nextToken()); for (int i = 0; i < q; i++) { st = new StringTokenizer(br.readLine()); int k = Integer.parseInt(st.nextToken()); quests.add(new Query(k, i)); } Collections.sort(quests); for (int i = 0; i < n - l + 1; i++) ans_quests(i); for (int i = 0; i < q; i++) { for (int j = 0; j < n - l + 1; j++) { System.out.print(ans[i][j]); System.out.print(" "); } System.out.println(); } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...