結果
問題 |
No.5010 Better Mo's Algorithm is Needed!! (Unweighted)
|
ユーザー |
![]() |
提出日時 | 2025-01-24 03:05:00 |
言語 | Go (1.23.4) |
結果 |
AC
|
実行時間 | 447 ms / 5,000 ms |
コード長 | 1,035 bytes |
コンパイル時間 | 18,387 ms |
コンパイル使用メモリ | 245,332 KB |
実行使用メモリ | 11,904 KB |
スコア | 58,841,841 |
最終ジャッジ日時 | 2025-01-24 03:06:45 |
合計ジャッジ時間 | 98,815 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
純コード判定しない問題か言語 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 120 |
ソースコード
package main import . "fmt" import . "os" import bf "bufio" import mr "math/rand" func min(a,b int) int { if a<b { return a } return b } func max(a,b int) int { return a+b-min(a,b) } func time(ls,rs,p []int) (t int64) { c,d:=-1,-1 for i,pi := range p { a,b := ls[pi],rs[pi] t += int64(b-a+1)*100 if i > 0 { x,y:=min(a,c),max(a,c) u,v:=min(b,d),max(b,d) t += int64(y-x)*100 t += int64(v-u)*100 } c,d = a,b } return } func main() { rd:=bf.NewReader(Stdin) wr:=bf.NewWriter(Stdout) var n,q,wt,st int Fscan(rd,&n,&q,&wt,&st) ws := make([]int, n) ls := make([]int, q) rs := make([]int, q) p := make([]int, q) for i := range ws { Fscan(rd,&ws[i]) } for i := range ls { Fscan(rd,&ls[i],&rs[i]) p[i] = i } t := time(ls,rs,p) for i := range mr.Perm(q)[:min(q,100)] { k := mr.Intn(q) p[i],p[k]=p[k],p[i] e := time(ls,rs,p) if e < t { t = e } else { p[i],p[k]=p[k],p[i] } } for i,pi := range p { if i > 0 { Fprint(wr, " ") } Fprint(wr, pi+1) } wr.Flush() }