forked from EndlessCheng/codeforces-go
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path1004D.go
66 lines (62 loc) · 1.04 KB
/
1004D.go
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
package main
import (
"bufio"
. "fmt"
"io"
)
// github.com/EndlessCheng/codeforces-go
func CF1004D(_r io.Reader, out io.Writer) {
in := bufio.NewReader(_r)
abs := func(x int) int {
if x < 0 {
return -x
}
return x
}
var t, v, mx int
Fscan(in, &t)
cnt := make([]int, t)
for range cnt {
Fscan(in, &v)
cnt[v]++
if v > mx {
mx = v
}
}
row := 0
for ; row+1 < t && row*4+4 == cnt[row+1]; row++ {
}
f := func(n, m int) bool {
col := n - 1 - row + m - 1 - mx
if row >= n || col < 0 || col >= m {
return false
}
c2 := make([]int, t)
for i := 0; i < n; i++ {
for j := 0; j < m; j++ {
v := abs(i-row) + abs(j-col)
if v >= t {
return false
}
if c2[v]++; c2[v] > cnt[v] {
return false
}
}
}
for i, c := range c2 {
if c != cnt[i] {
return false
}
}
Fprintln(out, n, m)
Fprintln(out, row+1, col+1)
return true
}
for d := 1; d*d <= t; d++ {
if t%d == 0 && (f(d, t/d) || f(t/d, d)) {
return
}
}
Fprint(out, -1)
}
//func main() { CF1004D(os.Stdin, os.Stdout) }