Submission #58038450


Source Code Expand

N,M,Q = gets.split.map(&:to_i) # 1000,10,950
Ask,Ans = lambda{
if $debug
	Coins = -1,*[*[1]*M,*[0]*(N-M)].shuffle
end
	qc = 0
	next lambda{|x,y|
		if Q<qc += 1
			warn 'QC over'
			exit 1
		end
		if [x,y].any?{|x| x<1||N<x }
			warn "Invalid coins (#{x},#{y}) "
			exit 1
		end
if $debug
		a = "#{Coins[x]^Coins[y]}"
else
		puts "? #{x} #{y}"
		$stdout.flush
		a = gets[0]
end
		next 0 if a==?0
		next 1 if a==?1
		warn "Rejected"
		exit 1
	},lambda{|as|
		warn "Answered (#{as.sort*?,})"
		puts [?!,*as]*' '
if $debug
		warn "Answer   (#{(1..N).select{|i| 0<Coins[i] }*?,})"
end
		exit 0
	}
}.call
F = lambda{|n,m,hint=nil| # n:1..N; m:0..M
	k = N-n+1
	b = [m,[k-m,10].min].min
	cs,ol = [0],[1,0]
	until b<ol.max || cs.size==k
		cs.push cs[-1]^Ask[n+cs.size-1,n+cs.size]
		ol[cs[-1]] += 1
	end
	if m<k-m || 10<ol.max # 多数派が偽物ではありえないほど多くなった
		cs.map!{|c| 1-c } unless b<ol[0]
	elsif k-m<m # 多数が本物ではありえないほど多くなった
		cs.map!{|c| 1-c } unless b<ol[1]
	else # 同数
		cs.map!{|c| 1-c } if 1==Ask[hint,n+cs.index(1)]
	end
	next cs
}
C,OI,hint = [-1],[0,0]
C.concat F[C.size,M-OI[1],hint].tap{|cs|
	i = cs.index 1
	hint ||= C.size+i if i
	cs.each{|c| OI[c] += 1 }
} until N<C.size
Ans[(1..N).select{|i| 0<C[i] }]

Submission Info

Submission Time
Task A - Appraiser
User ds14050
Language Ruby (ruby 3.2.2)
Score 600
Code Size 1343 Byte
Status AC
Exec Time 112 ms
Memory 17620 KiB

Judge Result

Set Name All
Score / Max Score 600 / 600
Status
AC × 50
Set Name Test Cases
All test_01.txt, test_02.txt, test_03.txt, test_04.txt, test_05.txt, test_06.txt, test_07.txt, test_08.txt, test_09.txt, test_10.txt, test_11.txt, test_12.txt, test_13.txt, test_14.txt, test_15.txt, test_16.txt, test_17.txt, test_18.txt, test_19.txt, test_20.txt, test_21.txt, test_22.txt, test_23.txt, test_24.txt, test_25.txt, test_26.txt, test_27.txt, test_28.txt, test_29.txt, test_30.txt, test_31.txt, test_32.txt, test_33.txt, test_34.txt, test_35.txt, test_36.txt, test_37.txt, test_38.txt, test_39.txt, test_40.txt, test_41.txt, test_42.txt, test_43.txt, test_44.txt, test_45.txt, test_46.txt, test_47.txt, test_48.txt, test_49.txt, test_50.txt
Case Name Status Exec Time Memory
test_01.txt AC 112 ms 17444 KiB
test_02.txt AC 51 ms 17432 KiB
test_03.txt AC 50 ms 17512 KiB
test_04.txt AC 49 ms 17504 KiB
test_05.txt AC 51 ms 17196 KiB
test_06.txt AC 50 ms 17488 KiB
test_07.txt AC 49 ms 17596 KiB
test_08.txt AC 50 ms 17496 KiB
test_09.txt AC 51 ms 17588 KiB
test_10.txt AC 51 ms 17488 KiB
test_11.txt AC 98 ms 17504 KiB
test_12.txt AC 98 ms 17620 KiB
test_13.txt AC 97 ms 17480 KiB
test_14.txt AC 99 ms 17384 KiB
test_15.txt AC 98 ms 17452 KiB
test_16.txt AC 98 ms 17516 KiB
test_17.txt AC 99 ms 17592 KiB
test_18.txt AC 98 ms 17380 KiB
test_19.txt AC 98 ms 17572 KiB
test_20.txt AC 99 ms 17324 KiB
test_21.txt AC 48 ms 17516 KiB
test_22.txt AC 49 ms 17612 KiB
test_23.txt AC 48 ms 17480 KiB
test_24.txt AC 47 ms 17508 KiB
test_25.txt AC 48 ms 17584 KiB
test_26.txt AC 47 ms 17500 KiB
test_27.txt AC 47 ms 17616 KiB
test_28.txt AC 47 ms 17408 KiB
test_29.txt AC 47 ms 17576 KiB
test_30.txt AC 48 ms 17584 KiB
test_31.txt AC 48 ms 17476 KiB
test_32.txt AC 47 ms 17484 KiB
test_33.txt AC 49 ms 17532 KiB
test_34.txt AC 47 ms 17520 KiB
test_35.txt AC 48 ms 17444 KiB
test_36.txt AC 49 ms 17596 KiB
test_37.txt AC 48 ms 17188 KiB
test_38.txt AC 47 ms 17604 KiB
test_39.txt AC 48 ms 17484 KiB
test_40.txt AC 48 ms 17440 KiB
test_41.txt AC 47 ms 17528 KiB
test_42.txt AC 47 ms 17532 KiB
test_43.txt AC 47 ms 17500 KiB
test_44.txt AC 47 ms 17448 KiB
test_45.txt AC 47 ms 17516 KiB
test_46.txt AC 47 ms 17568 KiB
test_47.txt AC 48 ms 17236 KiB
test_48.txt AC 48 ms 17484 KiB
test_49.txt AC 48 ms 17504 KiB
test_50.txt AC 47 ms 17564 KiB