-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathdiff_Main.cpp
More file actions
74 lines (71 loc) · 1.7 KB
/
Copy pathdiff_Main.cpp
File metadata and controls
74 lines (71 loc) · 1.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
diff --git a/CodeJam/Main.cpp b/examples/2019/KS_H/B/Main.cpp
index 2150379..f6f17e9 100644
--- a/CodeJam/Main.cpp
+++ b/examples/2019/KS_H/B/Main.cpp
@@ -1570,11 +1570,69 @@ void init(){
cin >> T;
}
+ll N;
+v(v(bool)) grid;
+
void readInput(){
+ cin >> N;
+ grid.cl;
+ grid.resize(N);
+ forn(i,N){
+ str t;
+ cin >> t;
+ grid[i].resize(N);
+ forn(j,N){
+ grid[i][j] = t[j] == '#';
+ }
+ }
}
// write to COMM_TYPE result
void calcFunction() {
+ ll result_diag = 0;
+ ll result_offdiag = 0;
+
+ // first diag
+ forn(i, N){
+ if(!grid[i][i]){
+ result_diag++;
+ grid[i][i]=!grid[i][i];
+ ll k = 1;
+ while(i+k<N && i-k>=0){
+ grid[i+k][i-k]=!grid[i+k][i-k];
+ grid[i-k][i+k]=!grid[i-k][i+k];
+ k++;
+ }
+ }
+ }
+ forn(i, (N+1)/2 - 1){
+ if(!grid[0][2*i+2])
+ result_diag++;
+ if(!grid[2*i+2][0])
+ result_diag++;
+ }
+ // now offdiag
+ ll off = N%2;
+ forn(i,N-off){
+ if(!grid[i][N-1-i-off]){
+ result_offdiag++;
+ ll k=max(-i,off+i+1-N);
+ while(i+k<N && k<1+i+off){
+ grid[i+k][N-1-i-off+k]=!grid[i+k][N-1-i-off+k];
+ k++;
+ }
+ }
+ }
+ forn(i, N-1){
+ if(!grid[i][i+1])
+ result_offdiag++;
+ }
+
+ ll n_diag = 2 * N - 1 + (N%2);
+ ll n_offdiag = 2 * N - 1 - (N%2);
+ result_diag = min(result_diag, n_diag - result_diag);
+ result_offdiag = min(result_offdiag, n_offdiag - result_offdiag);
+ result = result_diag + result_offdiag;
}
} // namespace task