CSES - Datatähti 2018 alku - Results
Submission details
Task:Kyselyt
Sender:yhyy
Submission time:2017-10-15 23:39:20 +0300
Language:Assembly
Status:READY
Result:100
Feedback
groupverdictscore
#1ACCEPTED12
#2ACCEPTED25
#3ACCEPTED63
Test results
testverdicttimegroup
#1ACCEPTED0.07 s1details
#2ACCEPTED0.06 s2details
#3ACCEPTED0.07 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
	
;) ******************  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 ...