Submission #54933176


Source Code Expand

class T
	def true?
		@true
	end
	def to_s
		@true ? 'True' : 'False'
	end
	def rank
		@rank
	end

	def p= p
		@p = p
	end
	def flip
		@true = ! @true
		@p.onchange if @p
	end
end

class Tm<T
	def initialize
		@rank = 1
		@true = false
	end

	def inspect
		"<Tm>"
	end
end

class Op<T
	def initialize op,l,r
		@op,@l,@r = op,l,r
		@rank = [l.rank,r.rank].max+1
		@true = l.true?.send(op,r.true?)
		l.p = r.p = self
	end

	def inspect
		"<Op #{@op} #{@rank})>"
	end

	def onchange
		flip if @true != @l.true?.send(@op,@r.true?)
	end
end

Z,Q = gets.split.map(&:to_i)
F = gets.chomp

warn [:scan,Z]*'	'

S,O = [],[ops=[]]
F.each_byte{|op|
	case op
	when 0x5b # [
		S<<0
	when 0x30..0x39 # 0..9
		S[-1] *= 10
		S[-1] += op-0x30
	when 0x5d # ]
		S[-1] *= -1
	when 0x28 # (
		O<<ops = []
	when 0x29 # )
		S.concat O.pop.reverse
		ops = O[-1]
	else # ! & ^ |
		if op==0x21 && ops[-1]==0x21 # !!
			ops.pop
		else
			S<<ops.pop while ops[0] && ops[-1]<op
			ops<<op
		end
	end
}
S.concat ops.reverse

warn [:token,S.size]*'	'

S.pop(S.size).each{|op|
	if op<0
		S<<[:t,-op]
	else
		if op==0x21 # !
			S<<[:t,0]
			op = :^
		else
			op = op.chr.intern
		end
		l,r = S.pop 2
		if l[0]==op
			if r[0]==op
				l,r = r,l if l.size<r.size
				r.shift
				l.concat r
			else
				l<<r
			end
			S<<l
		elsif r[0]==op
			r<<l
			S<<r
		else
			S<<[op,l,r]
		end
	end
}

A2T = Hash.new{|h,a| h[a] = [] }
if :スタックが小さいなら
	E = [[]]
	while (op,*args = S.pop)
		if op==:t
			t = Tm.new
			A2T[*args]<<t
			E[-1]<<t
		elsif args[0]
			E<<[]
			S<<[op]
			S.concat args
		else
			args = E.pop
			args = args.each_slice(2).map{|a,b| b ? Op.new(op,a,b) : a } while args[1]
			E[-1]<<args[0]
		end
	end
	X, = E.flatten!
else
	M = lambda{|(op,*args)|
		if op==:t
			t = Tm.new
			A2T[*args]<<t
			t
		else
			args.map!(&M)
			args = args.each_slice(2).map{|a,b| b ? Op.new(op,a,b) : a } while args[1]
			args[0]
		end
	}
	X, = S.map!(&M)
end
A = A2T.keys.sort<<10**10

warn [:rank,X.rank]*'	'
warn [:query,Q]*'	'

Ans = [nil]*Q
Q.times.map{|q| [q,gets.to_i] }.sort_by{_2}.each{|q,x|
	A2T[A.shift].each(&:flip) while A[0]<=x
	Ans[q] = X.to_s
}

puts Ans

Submission Info

Submission Time
Task A - 試験 2 (Examination 2)
User ds14050
Language Ruby (ruby 3.2.2)
Score 100
Code Size 2299 Byte
Status AC
Exec Time 1088 ms
Memory 100072 KiB

Judge Result

Set Name Sample Subtask1 Subtask2 Subtask3 Subtask4 Subtask5 Subtask6 Subtask7
Score / Max Score 0 / 0 5 / 5 20 / 20 10 / 10 6 / 6 12 / 12 20 / 20 27 / 27
Status
AC × 3
AC × 12
AC × 10
AC × 17
AC × 12
AC × 21
AC × 27
AC × 85
Set Name Test Cases
Sample sample-01.txt, sample-02.txt, sample-03.txt
Subtask1 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, sample-02.txt
Subtask2 02-01.txt, 02-02.txt, 02-03.txt, 02-04.txt, 02-05.txt, 02-06.txt, 02-07.txt, 02-08.txt, 02-09.txt, 02-10.txt
Subtask3 03-01.txt, 03-02.txt, 03-03.txt, 03-04.txt, 03-05.txt, 03-06.txt, 03-07.txt, 03-08.txt, 03-09.txt, 03-10.txt, 03-11.txt, 03-12.txt, 03-13.txt, 03-14.txt, sample-01.txt, sample-02.txt, sample-03.txt
Subtask4 04-01.txt, 04-02.txt, 04-03.txt, 04-04.txt, 04-05.txt, 04-06.txt, 04-07.txt, 04-08.txt, 04-09.txt, 04-10.txt, 04-11.txt, sample-03.txt
Subtask5 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 05-01.txt, 05-02.txt, 05-03.txt, 05-04.txt, 05-05.txt, 05-06.txt, 05-07.txt, 05-08.txt, 05-09.txt, sample-02.txt
Subtask6 03-01.txt, 03-02.txt, 03-03.txt, 03-04.txt, 03-05.txt, 03-06.txt, 03-07.txt, 03-08.txt, 03-09.txt, 03-10.txt, 03-11.txt, 03-12.txt, 03-13.txt, 03-14.txt, 06-01.txt, 06-02.txt, 06-03.txt, 06-04.txt, 06-05.txt, 06-06.txt, 06-07.txt, 06-08.txt, 06-09.txt, 06-10.txt, sample-01.txt, sample-02.txt, sample-03.txt
Subtask7 01-01.txt, 01-02.txt, 01-03.txt, 01-04.txt, 01-05.txt, 01-06.txt, 01-07.txt, 01-08.txt, 01-09.txt, 01-10.txt, 01-11.txt, 02-01.txt, 02-02.txt, 02-03.txt, 02-04.txt, 02-05.txt, 02-06.txt, 02-07.txt, 02-08.txt, 02-09.txt, 02-10.txt, 03-01.txt, 03-02.txt, 03-03.txt, 03-04.txt, 03-05.txt, 03-06.txt, 03-07.txt, 03-08.txt, 03-09.txt, 03-10.txt, 03-11.txt, 03-12.txt, 03-13.txt, 03-14.txt, 04-01.txt, 04-02.txt, 04-03.txt, 04-04.txt, 04-05.txt, 04-06.txt, 04-07.txt, 04-08.txt, 04-09.txt, 04-10.txt, 04-11.txt, 05-01.txt, 05-02.txt, 05-03.txt, 05-04.txt, 05-05.txt, 05-06.txt, 05-07.txt, 05-08.txt, 05-09.txt, 06-01.txt, 06-02.txt, 06-03.txt, 06-04.txt, 06-05.txt, 06-06.txt, 06-07.txt, 06-08.txt, 06-09.txt, 06-10.txt, 07-01.txt, 07-02.txt, 07-03.txt, 07-04.txt, 07-05.txt, 07-06.txt, 07-07.txt, 07-08.txt, 07-09.txt, 07-10.txt, 07-11.txt, 07-12.txt, 07-13.txt, 07-14.txt, 07-15.txt, 07-16.txt, 07-17.txt, sample-01.txt, sample-02.txt, sample-03.txt
Case Name Status Exec Time Memory
01-01.txt AC 758 ms 75864 KiB
01-02.txt AC 729 ms 76616 KiB
01-03.txt AC 868 ms 89900 KiB
01-04.txt AC 729 ms 71248 KiB
01-05.txt AC 727 ms 75756 KiB
01-06.txt AC 1088 ms 100072 KiB
01-07.txt AC 702 ms 75028 KiB
01-08.txt AC 751 ms 74196 KiB
01-09.txt AC 734 ms 78764 KiB
01-10.txt AC 699 ms 70568 KiB
01-11.txt AC 725 ms 73216 KiB
02-01.txt AC 484 ms 47840 KiB
02-02.txt AC 649 ms 61764 KiB
02-03.txt AC 393 ms 51188 KiB
02-04.txt AC 416 ms 51236 KiB
02-05.txt AC 411 ms 48996 KiB
02-06.txt AC 530 ms 61636 KiB
02-07.txt AC 525 ms 61192 KiB
02-08.txt AC 471 ms 53024 KiB
02-09.txt AC 509 ms 53868 KiB
02-10.txt AC 451 ms 61988 KiB
03-01.txt AC 234 ms 45644 KiB
03-02.txt AC 236 ms 44420 KiB
03-03.txt AC 220 ms 40488 KiB
03-04.txt AC 220 ms 40704 KiB
03-05.txt AC 231 ms 47356 KiB
03-06.txt AC 229 ms 45632 KiB
03-07.txt AC 234 ms 46036 KiB
03-08.txt AC 242 ms 45972 KiB
03-09.txt AC 233 ms 45612 KiB
03-10.txt AC 241 ms 45696 KiB
03-11.txt AC 222 ms 44636 KiB
03-12.txt AC 236 ms 45808 KiB
03-13.txt AC 241 ms 45812 KiB
03-14.txt AC 242 ms 45980 KiB
04-01.txt AC 588 ms 72428 KiB
04-02.txt AC 573 ms 69908 KiB
04-03.txt AC 828 ms 90716 KiB
04-04.txt AC 596 ms 69956 KiB
04-05.txt AC 582 ms 73844 KiB
04-06.txt AC 701 ms 70212 KiB
04-07.txt AC 592 ms 71980 KiB
04-08.txt AC 599 ms 70928 KiB
04-09.txt AC 592 ms 69024 KiB
04-10.txt AC 599 ms 70404 KiB
04-11.txt AC 586 ms 73524 KiB
05-01.txt AC 784 ms 72560 KiB
05-02.txt AC 784 ms 72432 KiB
05-03.txt AC 820 ms 79616 KiB
05-04.txt AC 805 ms 80508 KiB
05-05.txt AC 779 ms 72132 KiB
05-06.txt AC 817 ms 78348 KiB
05-07.txt AC 805 ms 74948 KiB
05-08.txt AC 739 ms 78124 KiB
05-09.txt AC 700 ms 78504 KiB
06-01.txt AC 430 ms 54980 KiB
06-02.txt AC 533 ms 61104 KiB
06-03.txt AC 487 ms 55632 KiB
06-04.txt AC 426 ms 57928 KiB
06-05.txt AC 417 ms 52440 KiB
06-06.txt AC 443 ms 52412 KiB
06-07.txt AC 415 ms 57804 KiB
06-08.txt AC 446 ms 55360 KiB
06-09.txt AC 436 ms 54368 KiB
06-10.txt AC 412 ms 57056 KiB
07-01.txt AC 747 ms 73364 KiB
07-02.txt AC 819 ms 74964 KiB
07-03.txt AC 1040 ms 88828 KiB
07-04.txt AC 795 ms 75072 KiB
07-05.txt AC 910 ms 86972 KiB
07-06.txt AC 802 ms 87048 KiB
07-07.txt AC 725 ms 75480 KiB
07-08.txt AC 947 ms 85720 KiB
07-09.txt AC 805 ms 70488 KiB
07-10.txt AC 753 ms 74412 KiB
07-11.txt AC 722 ms 71980 KiB
07-12.txt AC 723 ms 72608 KiB
07-13.txt AC 754 ms 74292 KiB
07-14.txt AC 776 ms 74020 KiB
07-15.txt AC 858 ms 92928 KiB
07-16.txt AC 780 ms 75504 KiB
07-17.txt AC 1042 ms 90168 KiB
sample-01.txt AC 43 ms 17368 KiB
sample-02.txt AC 43 ms 17104 KiB
sample-03.txt AC 43 ms 17588 KiB