結果
| 問題 | No.1251 絶対に間違ってはいけない最小化問題 | 
| コンテスト | |
| ユーザー |  ttakezawa | 
| 提出日時 | 2020-10-10 03:20:30 | 
| 言語 | Go (1.23.4) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 273 ms / 2,000 ms | 
| コード長 | 1,051 bytes | 
| コンパイル時間 | 15,655 ms | 
| コンパイル使用メモリ | 233,672 KB | 
| 実行使用メモリ | 14,780 KB | 
| 最終ジャッジ日時 | 2024-07-20 15:32:55 | 
| 合計ジャッジ時間 | 28,637 ms | 
| ジャッジサーバーID (参考情報) | judge2 / judge3 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| sample | AC * 3 | 
| other | AC * 42 | 
ソースコード
package main
import (
	"bufio"
	"fmt"
	"os"
	"sort"
)
type State struct {
	A, B int
}
func main() {
	N := ReadInt()
	states := make([]*State, N)
	a := ReadInts(N)
	b := ReadInts(N)
	for i := 0; i < N; i++ {
		states[i] = &State{
			A: a[i],
			B: b[i],
		}
	}
	sort.Slice(states, func(i, j int) bool {
		return states[i].A < states[j].A
	})
	s := make([]int, N+1)
	for i := 0; i < N; i++ {
		s[i+1] = s[i] + states[i].B
	}
	for i := 0; i < N; i++ {
		if s[i+1] >= (s[N]+1)/2 {
			X := states[i].A
			ans := 0
			for j := 0; j < i; j++ {
				ans += states[j].B * (X - states[j].A)
			}
			for j := i + 1; j < N; j++ {
				ans += states[j].B * (states[j].A - X)
			}
			fmt.Println(X, ans)
			return
		}
	}
}
var reader = bufio.NewReader(os.Stdin)
func Scan(a ...interface{}) {
	if _, err := fmt.Fscan(reader, a...); err != nil {
		panic(err)
	}
}
func ReadInt() (i int)       { Scan(&i); return }
func ReadString() (s string) { Scan(&s); return }
func ReadInts(n int) (a []int) {
	for i := 0; i < n; i++ {
		a = append(a, ReadInt())
	}
	return
}
            
            
            
        