Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit a1674c5

Browse files
commit
1 parent 0eea59b commit a1674c5

File tree

11 files changed

+251
-91
lines changed

11 files changed

+251
-91
lines changed

‎PreffixSumSlidingWindow/.idea/workspace.xml

Lines changed: 140 additions & 64 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

‎PreffixSumSlidingWindow/raw/links

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,12 @@ http://www.geeksforgeeks.org/tag/sliding-window/
1313
prefix sums/sliding window
1414
https://discuss.leetcode.com/topic/87710/javascript-o-n-using-flexible-sliding-window-and-prefix-sums
1515
https://cs.stackexchange.com/questions/39529/efficient-way-to-calculate-sum-in-sliding-window
16-
https://cs.stackexchange.com/questions/64305/sliding-window-sum-greater-than-n-using-as-few-numbers-as-possible
16+
https://cs.stackexchange.com/questions/64305/sliding-window-sum-greater-than-n-using-as-few-numbers-as-possible
17+
18+
19+
http://codeforces.com/blog/entry/52545
20+
http://codeforces.com/blog/entry/9944
21+
http://www.spoj.com/problems/KOIREP/
22+
http://codeforces.com/blog/entry/17614
23+
https://abitofcs.blogspot.com.br/2014/11/codeforces-round-278-div1-problem-b.html
24+
http://codeforces.com/blog/entry/21802

‎PreffixSumSlidingWindow/src/problems/ChargingTheBatteries.java

Lines changed: 102 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import java.util.*;
66

77
/**
8-
*
8+
* https://www.hackerrank.com/contests/101hack51/challenges/charging-the-batteries?utm_source=101hack52-reminder-1&utm_medium=email&utm_campaign=101hack52
99
* */
1010

1111
public class ChargingTheBatteries {
@@ -14,40 +14,67 @@ public class ChargingTheBatteries {
1414
public static final PrintWriter writer = new PrintWriter(new OutputStreamWriter(System.out), true);
1515

1616
static class Points2D {
17-
int x, y, line;
18-
public Points2D(int x, int y, int line) {
17+
long x, y, line;
18+
public Points2D(long x, long y, long line) {
1919
this.x = x;
2020
this.y = y;
2121
this.line = line;
2222
}
2323

24-
public int absManhatanDistance(Points2D that) {
24+
@Override
25+
public String toString() {
26+
return String.format("(%d %d) Linha %d", x, y, line);
27+
}
28+
29+
public long absManhattanDistance(Points2D that) {
2530
return Math.abs(x-that.x) + Math.abs(y-that.y);
2631
}
2732
}
2833

29-
static Comparator<Points2D> sortByLineNumber = new Comparator<Points2D>() {
34+
static Comparator<Points2D> sortAntiClockwise = new Comparator<Points2D>() {
3035
@Override
3136
public int compare(Points2D a, Points2D b) {
32-
return a.line - b.line;
37+
return (int)(a.line - b.line);
3338
}
3439
};
3540

36-
public static int minValueSubsetK(int [] set, int k) {
37-
int min = set[0];
38-
for(int idx=0; idx<k; idx++)
39-
min = set[idx] < min ? set[idx] : min;
40-
int current = min;
41-
for(int idx=k; idx<set.length; idx++) {
42-
current = current + set[idx] - set[idx-k];
43-
min = current < min ? current : min;
41+
static Comparator<Points2D> sortClockwise = new Comparator<Points2D>() {
42+
@Override
43+
public int compare(Points2D a, Points2D b) {
44+
return (int)(b.line - a.line);
4445
}
45-
return min;
46+
};
47+
48+
static Comparator<Points2D> sortCoordAntiClockwise = new Comparator<Points2D>() {
49+
@Override
50+
public int compare(Points2D a, Points2D b) {
51+
if( (a.line - b.line) < 0 )
52+
return -1;
53+
else if( (a.line - b.line) > 0)
54+
return 1;
55+
return (int)((a.x - b.x) + (a.y - b.y));
56+
}
57+
};
58+
59+
public static long minValueSubsetK(long [] setAntiClockwise, long [] setClockwise, int k) {
60+
long min1 = 0, min2 = 0;
61+
for(int idx=0; idx<k; idx++) {
62+
min1 += setAntiClockwise[idx];
63+
min2 += setClockwise[idx];
64+
}
65+
long current1 = min1, current2 = min2;
66+
for(int idx=k; idx<setAntiClockwise.length; idx++) {
67+
current1 = current1 + setAntiClockwise[idx] - setAntiClockwise[idx-k];
68+
min1 = current1 < min1 ? current1 : min1;
69+
current2 = current2 + setClockwise[idx] - setClockwise[idx-k];
70+
min2 = current2 < min2 ? current2 : min2;
71+
}
72+
return min1 < min2 ? min1 : min2;
4673
}
4774

4875
public static void s1(int n, int m, int k) throws IOException {
4976
StringTokenizer tk;
50-
int set [] = new int[m];
77+
long set [] = new long[m], set2 [] = newlong[m];
5178
// sockets
5279
Points2D [] points2D = new Points2D[m];
5380
for (int i = 0; i < m; i++) {
@@ -73,22 +100,73 @@ else if(x >= 0 && y == n)
73100
else
74101
line = 4;
75102
points2D[i] = new Points2D(x, y, line);
76-
77103
}
78-
Arrays.sort(points2D, sortByLineNumber);
79-
for(int i=1; i<m; i++) {
80-
set[i-1] = points2D[i].absManhatanDistance(points2D[i-1]);
81-
}
82-
writer.printf("%d", minValueSubsetK(set, k));
104+
Arrays.sort(points2D, sortCoordAntiClockwise);
105+
// antihorario
106+
for(int i=1; i<m; i++)
107+
set[i-1] = points2D[i].absManhattanDistance(points2D[i-1]);
108+
set[m-1] = points2D[m-1].absManhattanDistance(points2D[0]);
109+
// horario
110+
for(int i=m-1; i>0; i--)
111+
set2[m-i-1] = points2D[i].absManhattanDistance(points2D[i-1]);
112+
set2[m-1] = points2D[0].absManhattanDistance(points2D[m-1]);
113+
writer.printf("%d", minValueSubsetK(set, set2,k-1));
83114
}
84115

85-
public static void s2(int n, int m, int k) {
116+
public static void s2(int n, int m, int k) throws IOException {
117+
// linhas do quadrado
86118
Points2D [] line1 = new Points2D[m];
87119
Points2D [] line2 = new Points2D[m];
88120
Points2D [] line3 = new Points2D[m];
89121
Points2D [] line4 = new Points2D[m];
122+
int o = 0, p = 0, q = 0, r = 0;
123+
StringTokenizer tk;
124+
long set [] = new long[m], set2 [] = new long[m];
125+
// sockets
126+
for (int i = 0; i < m; i++) {
127+
tk = new StringTokenizer(reader.readLine(), " ");
128+
int x = Integer.parseInt(tk.nextToken());
129+
int y = Integer.parseInt(tk.nextToken());
130+
if(x >= 0 && y == 0)
131+
line1[o++] = new Points2D(x, y, 1);
132+
else if(x == n && y >=0)
133+
line2[p++] = new Points2D(x, y, 2);
134+
else if(x >= 0 && y == n)
135+
line3[q++] = new Points2D(x, y, 3);
136+
else
137+
line4[r++] = new Points2D(x, y, 4);
138+
}
139+
/**
140+
* Percorrer da linha 1 a 4
141+
* */
142+
int indexSet = 0;
143+
// anti-clockwise
144+
for (int idx = 1; idx < o; idx++)
145+
set[indexSet++] = line1[idx].absManhattanDistance(line1[idx-1]);
146+
set[indexSet++] = line1[o-1].absManhattanDistance(line2[0]);
147+
148+
for (int idx = 1; idx < p; idx++)
149+
set[indexSet++] = line2[idx].absManhattanDistance(line2[idx-1]);
150+
set[indexSet++] = line2[p-1].absManhattanDistance(line3[0]);
151+
152+
for (int idx = 1; idx < q; idx++)
153+
set[indexSet++] = line3[idx].absManhattanDistance(line3[idx-1]);
154+
set[indexSet++] = line3[q-1].absManhattanDistance(line4[0]);
155+
156+
for (int idx = 1; idx < r; idx++)
157+
set[indexSet++] = line4[idx].absManhattanDistance(line4[idx-1]);
158+
set[indexSet] = line4[r-1].absManhattanDistance(line1[0]);
159+
160+
// clockwise
161+
indexSet = 0;
162+
set2[indexSet++] = line4[r-1].absManhattanDistance(line1[0]);
163+
for (int idx = r-1; idx > 0; idx--)
164+
set2[indexSet++] = line4[idx].absManhattanDistance(line4[idx-1]);
165+
166+
writer.printf("%d", minValueSubsetK(set, set2,k-1));
90167
}
91168

169+
public static void s3(int n, int m, int k) {}
92170

93171
public static void main(String[] args) {
94172
try {
@@ -98,8 +176,7 @@ public static void main(String[] args) {
98176
int k = Integer.parseInt(tk.nextToken());
99177
s1(n, m, k);
100178
} catch (Exception e) {
101-
179+
System.out.println(e.getMessage());
102180
}
103181
}
104-
105182
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /