結果
問題 |
No.5021 Addition Pyramid
|
ユーザー |
![]() |
提出日時 | 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() }