結果
| 問題 |
No.5021 Addition Pyramid
|
| コンテスト | |
| ユーザー |
ID 21712
|
| 提出日時 | 2025-02-25 22:35:05 |
| 言語 | Go (1.23.4) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,451 bytes |
| コンパイル時間 | 17,295 ms |
| コンパイル使用メモリ | 246,616 KB |
| 実行使用メモリ | 22,120 KB |
| スコア | 0 |
| 最終ジャッジ日時 | 2025-02-25 22:35:29 |
| 合計ジャッジ時間 | 20,974 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | TLE * 1 -- * 49 |
ソースコード
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:=0;i<1e3;i++ {
for j,v:=range c {
for k:=j+1;k<n;k++ {
w:=c[k]
c[j]=rand.Intn(M)
c[k]=rand.Intn(M)
ts:=calc(n,a,c)
if ts<s {
v=c[j]
s=ts
} else {
c[j]=v
c[k]=w
}
}
}
}
for i,v:=range c {
if i>0 {
Print(" ")
}
Print(v)
}
Println()
}
ID 21712