結果
| 問題 |
No.5021 Addition Pyramid
|
| コンテスト | |
| ユーザー |
ID 21712
|
| 提出日時 | 2025-02-25 22:28:38 |
| 言語 | Go (1.23.4) |
| 結果 |
AC
|
| 実行時間 | 698 ms / 2,000 ms |
| コード長 | 1,217 bytes |
| コンパイル時間 | 12,546 ms |
| コンパイル使用メモリ | 240,472 KB |
| 実行使用メモリ | 8,484 KB |
| スコア | 44,088,905 |
| 最終ジャッジ日時 | 2025-02-25 22:29:28 |
| 合計ジャッジ時間 | 49,518 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
| 純コード判定しない問題か言語 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 50 |
ソースコード
package main
import . "fmt"
import "math/rand"
const M int = 1e8
func min(a,b int) int {
if a<b {
return a
}
return b
}
func abs(a int) int {
if a<0 {
return -a
}
return a
}
func max(a,b int) int{
return a^b^min(a,b)
}
func calc(n int, a [][]int, c[]int) (s int) {
x:=make([]int,n)
copy(x,c)
for i:=n-1;i>=0;i-- {
for j:=range a[i] {
d:=abs(x[j]-a[i][j])
s=max(s,min(d,M-d))
if j+1<len(x) {
x[j]+=x[j+1]
x[j]%=M
}
}
}
return
}
func random(n int, a [][]int) (c []int) {
c=make([]int,n)
for i:=range c {
x:=a[n-1][i]+rand.Intn(M)
if x<0 {
x+=M
}
c[i]=x%M
}
return
}
func main() {
var n int
Scan(&n)
a:=make([][]int,n)
for i:=range a {
a[i]=make([]int,i+1)
for j:=range a[i] {
Scan(&a[i][j])
}
}
c:=make([]int,n)
copy(c,a[n-1])
s:=calc(n,a,c)
for i:=0;i<1e4;i++ {
t:=random(n,a)
ts:=calc(n,a,t)
if ts<s {
s=ts
c=t
}
}
for i:=0;i<2e3;i++ {
x:=make([]int,n)
copy(x,c)
for j,v:=range x {
p:=v+rand.Intn(M)
if p<0 {
p+=M
}
p%=M
x[j]=p
ts:=calc(n,a,x)
if ts<s {
s=ts
copy(c,x)
} else {
x[j]=v
}
}
}
for i,v:=range c {
if i>0 {
Print(" ")
}
Print(v)
}
Println()
}
ID 21712