結果
問題 |
No.5010 Better Mo's Algorithm is Needed!! (Unweighted)
|
ユーザー |
![]() |
提出日時 | 2025-01-24 09:54:04 |
言語 | Go (1.23.4) |
結果 |
AC
|
実行時間 | 947 ms / 5,000 ms |
コード長 | 1,601 bytes |
コンパイル時間 | 17,182 ms |
コンパイル使用メモリ | 244,244 KB |
実行使用メモリ | 16,748 KB |
スコア | 927,141,272 |
最終ジャッジ日時 | 2025-01-24 09:56:45 |
合計ジャッジ時間 | 155,158 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
純コード判定しない問題か言語 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 120 |
ソースコード
package main import . "fmt" import . "os" import bf "bufio" import mr "math/rand" import sr "sort" 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 parttime(ls,rs,p []int, i,j int) (t int64) { pi := p[i] a, b := ls[pi], rs[pi] pj := p[j] c, d := ls[pj], rs[pj] 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 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 } sr.Slice(p, func(i, j int) bool { pi,pj := p[i],p[j] di := rs[pi]-ls[pi] dj := rs[pj]-ls[pj] return di<dj }) pp := make([]int, q) ii,jj:=0,q-1 for _,pi := range p { if ls[pi]+rs[pi] < n { pp[jj] = pi jj-- } else { pp[ii] = pi ii++ } } p = pp for j := 0; j < 20; j++ { for i := range mr.Perm(q) { k := min(mr.Intn(q/200+1)+i+1,q-1) f,g := min(i,k), max(i,k) var t0,t1 int64 if f > 0 { t0 += parttime(ls,rs,p,f-1,f) t1 += parttime(ls,rs,p,f-1,g) } else { t0 += int64(rs[f]-ls[f]+1)*100 t1 += int64(rs[g]-rs[g]+1)*100 } if g+1 < len(p) { t0 += parttime(ls,rs,p,g,g+1) t1 += parttime(ls,rs,p,f,g+1) } if t0 >= t1 { for ; f<g ; f,g =f+1,g-1 { p[f],p[g]=p[g],p[f] } } } } for i,pi := range p { if i > 0 { Fprint(wr, " ") } Fprint(wr, pi+1) } wr.Flush() }