CSES - Datatähti 2018 alku - Results
Submission details
Task:Kyselyt
Sender:yhyy
Submission time:2017-10-06 21:36:15 +0300
Language:Assembly
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED12
#2ACCEPTED25
#3ACCEPTED63
Test results
testverdicttimegroup
#1ACCEPTED0.04 s1details
#2ACCEPTED0.05 s2details
#3ACCEPTED0.05 s3details

Code

section	.data
section	.bss
	syote resb 30000000	; syöte
	buf resb 90090000	; tuloste
	asd resb 1
section	.text
	global _start
_start:
	mov	eax, 3
	mov	ebx, 0
	mov	ecx, syote
	mov	edx, 30000000
	int	0x80		; lue syöte
	
	mov	rsi, syote
	mov	rdi, buf
	
	call	read	
	mov	r15, rax	; n
	xor	r14, r14
	mov	r13, buf
._00:
	call	read
	
	mov	r8, 1
	mov	r9, 9
	mov	r10, 1

._0:	mov	rdx, r9
	imul	rdx, r8
	cmp	rax, rdx
	jle	._1
	sub	rax, rdx
	imul	r9, 10
	inc	r8

	imul	r10, 10
	jmp	._0
._1:
	dec	rax
	xor	rdx, rdx
	cqo
	div	r8
	add	rax, r10

	mov	r12, rsi
	mov	rsi, rdi
	add	rsi, rdx
	call	print
	xchg	rdi, r13
	lodsb
	stosb
	mov	al, ' '
	stosb
	xchg	rdi, r13
	mov	rsi, r12
	
	inc	r14
	cmp	r14, r15
	jl	._00
	xchg	rdi, r13
.lopeta:
	call	flush
	mov	rax, 1
	mov	rbx, 0
	int	0x80


;) ******************   flush   ********************* (;
; suoritetaan lopussa niin buf tulostuu
flush:	;! huom sotkee lähes KAIKEN
	mov	rdx, rdi
	sub	rdx, buf
	mov	rax, 4
	mov	rbx, 1
	mov	rcx, buf
	int	0x80
	ret
	
	
;) ******************   read    ********************* (;
;! rsi nykyinen kohta syötteessä
;) laittaa syötteestä yhden luvun rax <- x, rdx <- |x|, rbx <- sign(x)
;! 64-bit
;( sotkee rbx, rdx ja rax)
read:
	mov	rbx, 1
	xor	rdx, rdx
	xor	rax, rax
._:	lodsb
	cmp	al, 0x2d
	je	._1
	cmp	al, 0x30
	jl	._2
	cmp	al, 0x39
	jg	._2
	sub	al, 0x30
	imul	rdx, 10
	add	rdx, rax
	cmp	rdx, 0
	jne	._
	jmp	._3
._1:	mov	rbx, -1
._2:	cmp	rdx, 0
	je	._
._3:	mov	rax, rdx
	imul	rax, rbx
	ret
	
;) ***************** debug_print ******************** (;
;) säilyttää rekisterit
;( aika häviö että 0x80 nollaa r8-r11 =/  )
debug_print:
	push	r8
	push	r9
	push	r10
	push	r11
	push	rdi
	push	rdx
	push	rbx
	push	rax
	push	rcx
	call	print
	call	flush
	pop	rcx
	pop	rax
	pop	rbx
	pop	rdx
	pop	rdi
	pop	r11
	pop	r10
	pop	r9
	pop	r8
	ret
;) ******************  print  ********************* (;
;! rdi tärkeä
;( sotkee rax, rdx, rbx)
print:
	cmp	rax, 0
	jnl	._
	mov	rdx, rax
	mov	al, 0x2d	;-
	stosb
	mov	rax, rdx
	imul	rax, -1
._:	mov	rbx, 0xa
	push	rdi
	mov	rdi, asd
	std
._1:	xor	rdx, rdx
	div	rbx
	xchg	rax, rdx
	add	al, 0x30
	stosb
	xchg	rax, rdx
	cmp	rax, 0
	jne	._1
	cld
	mov	rdx, rsi
	mov	rsi, rdi
	inc	rsi
	pop	rdi
._2:	lodsb
	stosb
	cmp	rsi, asd
	jng	._2
	mov	al, 0x20
	stosb
	mov	rsi, rdx
	ret

Test details

Test 1

Group: 1

Verdict: ACCEPTED

input
1000
582
214
723
273
...

correct output
0
1
7
7
6
...

user output
0 1 7 7 6 1 5 4 7 6 2 2 2 2 8 ...

Test 2

Group: 2

Verdict: ACCEPTED

input
1000
615664
916441
627600
279508
...

correct output
1
2
3
2
2
...

user output
1 2 3 2 2 8 7 9 8 3 7 1 9 8 4 ...

Test 3

Group: 3

Verdict: ACCEPTED

input
1000
672274832941907421
260504693279721732
646999966092970935
100853063389774434
...

correct output
7
2
2
0
9
...

user output
7 2 2 0 9 7 7 2 0 4 0 3 0 5 9 ...