CSES - Datatähti 2017 alku - Results
Submission details
Task:Kolikot
Sender:yhyy
Submission time:2016-10-03 21:19:55 +0300
Language:Assembly
Status:READY
Result:57
Feedback
groupverdictscore
#1ACCEPTED22
#2ACCEPTED35
#30
Test results
testverdicttimegroup
#1ACCEPTED0.06 s1details
#2ACCEPTED0.06 s1details
#3ACCEPTED0.07 s1details
#4ACCEPTED0.06 s1details
#5ACCEPTED0.06 s1details
#6ACCEPTED0.05 s2details
#7ACCEPTED0.06 s2details
#8ACCEPTED0.07 s2details
#9ACCEPTED0.06 s2details
#10ACCEPTED0.05 s2details
#11ACCEPTED0.06 s3details
#12ACCEPTED0.05 s3details
#13ACCEPTED0.07 s3details
#14ACCEPTED0.06 s3details
#150.07 s3details
#16ACCEPTED0.06 s3details

Code

section	.bss
	syote resb 3000000
	t resq 101010
	vasen resq 101010
	oikea resq 101010
	tuloste resb 100
section	.text
	global _start

_start:
	mov	eax, 3
	mov	ebx, 0
	mov	ecx, syote
	mov	edx, 3000000
	int	0x80
	mov	rsi, syote
	call	luku
	mov	ecx, r9d
	mov	r10d, r9d
	xor	edx, edx
.a:
	call	luku
	mov	[t+edx*8], r9d
	inc	edx
	loop	.a

	dec	r10
	mov	esi, 0
	mov	edi, r10d
	call	mergesort
	mov	ecx, r10d
	inc	ecx
	mov	edx, 0
	mov	rax, 1
.b:
	cmp	rax, [t+edx*8]
	jl	.lopeta
	add	rax, [t+edx*8]
	inc	edx
	loop	.b	
.lopeta:
	mov	rdi, tuloste
	call	tulosta
	mov	edx, edi
	sub	edx, tuloste
	mov	eax, 4
	mov	ebx, 1
	mov	ecx, tuloste
	int	0x80
	mov	eax, 1
	mov	ebx, 0
	int	0x80
luku:
	xor	rax, rax
	xor	r9, r9
.a:
	lodsb
	cmp	al, 0x30
	jl	.mm
	cmp	al, 0x39
	jg	.mm
	sub	al, 0x30
	imul	r9, 10
	add	r9, rax
	jmp	.a
.mm:
	cmp	r9, 0
	je	.a
	ret

mergesort:
	push	rbp
	mov	rbp, rsp
	sub	rsp, 12
	cmp	esi, edi
	jnl	.palaa
	mov	[rbp-4], esi  ; alku
	mov	[rbp-8], edi  ; loppu
	mov	edx, esi
	add	edx, edi
	sar	edx, 1        ; keski
	mov	[rbp-12], edx
	mov	edi, edx
	call	mergesort
	mov	esi, [rbp-12]
	inc	esi
	mov	edi, [rbp-8]
	call	mergesort
	mov	esi, [rbp-4]
	mov	edi, [rbp-8]
	mov	edx, [rbp-12]
	call	merge
.palaa:
	leave
	ret

merge:
	mov	ecx, edx  ; keski
	sub	ecx, esi  ; -alku
	inc	ecx       ; +1
	xor	r9d, r9d  ; 0
	mov	r11d, esi ; alkut
.a:
	mov	rax, [t+r11d*8]  ; t
	mov	[vasen+r9d*8], rax 
	inc	r9d   ;++
	inc	r11d  ;++
	loop	.a
			
	mov	rax, 1000000000
	mov	[vasen+r9d*8], rax

	mov	ecx, edi    
	sub	ecx, edx    
	xor	r9d, r9d    
	mov	r11d, edx   
	inc	r11d	    
.b:
	mov	rax, [t+r11d*8]    ; t
	mov	[oikea+r9d*8], rax
	inc	r9d
	inc	r11d
	loop	.b
	mov	rax, 1000000000
	mov	[oikea+r9d*8], rax   ; oikea: [2, 1e9]

	mov	ecx, edi  ; loppu
	sub	ecx, esi  ; -alku
	inc	ecx       ; ++
	xor	r9d, r9d  ;0
	xor	r11d, r11d;0
	mov	r12d, esi ; alku
.c:
	mov	rax, [vasen+r9d*8]
	cmp	rax, [oikea+r11d*8]
	jg	.else
	mov	[t+r12d*8], rax
	inc	r12d
	inc	r9d
	jmp	.f
.else:
	mov	rax, [oikea+r11d*8]
	mov	[t+r12d*8], rax
	inc	r12d
	inc	r11d
.f	loop	.c
.palaa:
	ret

tulosta:
	mov	rbx, rax
	mov	rax, 1
	mov	rcx, 0xa
.hh:
	cqo
	imul	rcx
	cmp	rax, rbx
	jle	.hh
	xor	rdx, rdx
	cqo
	idiv	rcx
	mov	r13, rax
	mov	rcx, r13
	mov	rax, rbx
	jmp	.hui
.hh2:
	mov	rax, rbx
	mov	rcx, r13
	xor	rdx, rdx
	cqo
	idiv	rcx
	mov	rbx, rdx
	add	rax, 0x30
	stosb
	mov	rax, r13
	mov	rcx, 10
	xor	rdx, rdx
	cqo
	idiv	rcx
	mov	r13, rax
.hui:
	cmp	r13d, 0
	jg	.hh2
	mov	eax, 0xA
	stosb
	ret

Test details

Test 1

Group: 1

Verdict: ACCEPTED

input
10
5 3 1 4 5 1 3 2 2 3

correct output
30

user output
30

Test 2

Group: 1

Verdict: ACCEPTED

input
10
3 5 5 4 5 4 5 5 5 3

correct output
1

user output
1

Test 3

Group: 1

Verdict: ACCEPTED

input
10
10 9 2 8 7 10 7 1 5 2

correct output
62

user output
62

Test 4

Group: 1

Verdict: ACCEPTED

input
10
7 4 6 3 9 7 4 4 7 7

correct output
1

user output
1

Test 5

Group: 1

Verdict: ACCEPTED

input
10
8 2 1 7 9 7 5 2 4 5

correct output
51

user output
51

Test 6

Group: 2

Verdict: ACCEPTED

input
100
3 3 1 4 2 1 2 1 3 1 2 5 1 5 1 ...

correct output
269

user output
269

Test 7

Group: 2

Verdict: ACCEPTED

input
100
3 3 2 3 4 5 4 4 4 4 2 2 4 4 4 ...

correct output
1

user output
1

Test 8

Group: 2

Verdict: ACCEPTED

input
100
678 999 374 759 437 390 832 54...

correct output
1

user output
1

Test 9

Group: 2

Verdict: ACCEPTED

input
100
862 537 633 807 666 248 237 5 ...

correct output
30

user output
30

Test 10

Group: 2

Verdict: ACCEPTED

input
100
874 302 384 920 76 28 762 163 ...

correct output
41765

user output
41765

Test 11

Group: 3

Verdict: ACCEPTED

input
100000
4 2 5 3 2 3 5 2 2 2 3 4 3 3 2 ...

correct output
299640

user output
299640

Test 12

Group: 3

Verdict: ACCEPTED

input
100000
2 5 5 5 5 2 4 4 3 2 3 2 5 5 3 ...

correct output
1

user output
1

Test 13

Group: 3

Verdict: ACCEPTED

input
100000
98146842 766872135 84108268 28...

correct output
1

user output
1

Test 14

Group: 3

Verdict: ACCEPTED

input
100000
932032495 1 849176169 78948957...

correct output
29970

user output
29970

Test 15

Group: 3

Verdict:

input
100000
35894853 796619259 699878597 4...

correct output
44965249639582

user output
4

Test 16

Group: 3

Verdict: ACCEPTED

input
100000
930494676 960662779 904422858 ...

correct output
800020001

user output
800020001