結果
問題 |
No.5021 Addition Pyramid
|
ユーザー |
![]() |
提出日時 | 2025-02-25 22:54:06 |
言語 | Go (1.23.4) |
結果 |
AC
|
実行時間 | 1,414 ms / 2,000 ms |
コード長 | 1,489 bytes |
コンパイル時間 | 11,942 ms |
コンパイル使用メモリ | 238,052 KB |
実行使用メモリ | 8,484 KB |
スコア | 46,469,857 |
最終ジャッジ日時 | 2025-02-25 22:55:35 |
合計ジャッジ時間 | 82,553 ms |
ジャッジサーバーID (参考情報) |
judge7 / judge2 |
純コード判定しない問題か言語 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
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<3e4;i++ { t:=random(n,a) ts:=calc(n,a,t) if ts<s { s=ts c=t } } for i:=0;i<4e3;i++ { x:=make([]int,n) copy(x,c) for j,v:=range x { p:=v+rand.Intn(M)/10-M/20 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<2e3;i++ { j:=rand.Intn(n) k:=j+rand.Intn(n-2)+1 k%=n v:=c[j] w:=c[k] c[j]=(v+rand.Intn(M)/10-M/20+M)%M c[k]=(w+rand.Intn(M)/10-M/20+M)%M ts:=calc(n,a,c) if ts<s { s=ts } else { c[j]=v c[k]=w } } for i,v:=range c { if i>0 { Print(" ") } Print(v) } Println() }