結果
| 問題 | No.120 傾向と対策:門松列(その1) | 
| コンテスト | |
| ユーザー |  | 
| 提出日時 | 2019-03-30 12:44:00 | 
| 言語 | Kuin (KuinC++ v.2021.9.17) | 
| 結果 | 
                                AC
                                 
                             | 
| 実行時間 | 54 ms / 5,000 ms | 
| コード長 | 862 bytes | 
| コンパイル時間 | 2,417 ms | 
| コンパイル使用メモリ | 149,528 KB | 
| 実行使用メモリ | 5,376 KB | 
| 最終ジャッジ日時 | 2024-09-16 10:02:43 | 
| 合計ジャッジ時間 | 3,279 ms | 
| ジャッジサーバーID (参考情報) | judge5 / judge1 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| other | AC * 4 | 
ソースコード
func main()
	var T: int :: cui@input().toInt(&)
	for(1, T)
		var N: int :: cui@input().toInt(&)
		var ans: int :: f(N, cui@input().split(" "))
		do cui@print("\{ans}\n")
	end for
	
	func f(N: int, _: [][]char): int
		var a: []int :: #[N]int
		for i(0, N - 1)
			do a[i] :: _[i].toInt(&)
		end for
		do a.sort()
		var ok: int :: 0
		var ng: int :: N / 3 + 2
		while((ok - ng).abs() > 1)
			var mid: int :: (ok + ng) / 2
			if(isPossible(a, mid))
				do ok :: mid
			else
				do ng :: mid
			end if
		end while
		ret ok
		
		func isPossible(a: []int, targetNum: int): bool
			var num: int :: 0
			var cnt: int :: 0
			var prev: int :: -1
			for i(0, ^a - 1)
				if(a[i] <> prev)
					do cnt :: 0
				end if
				do cnt :+ 1
				if(cnt <= targetNum)
					do num :+ 1
				end if
				do prev :: a[i]
			end for
			ret num >= 3 * targetNum
		end func
	end func
end func
            
            
            
        