Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

Re:用汇编写的程序,居然都才61MS。。。

Posted by gdczcpy at 2010-06-01 01:01:48 on Problem 2456
In Reply To:用汇编写的程序,居然都才61MS。。。 Posted by:zyl072 at 2007-08-10 19:22:04
> 从快速排序到二分查找,全是用汇编写的,居然都用了61MS,不知道前面的大牛是怎么过的。。。。。
> 注意,请用C++编译。
> 
> 
> #include <stdio.h>
> //By 阿长
> 
> int a[100010];
> int min,max,dest,n,c,best;
> 
> void qsort(int head,int tail){
> 	_asm{
> 		mov eax,head
> 		mov edx,tail
> 		cmp eax,edx
> 		JGE over
> 
> 		push ebx
> 		mov ecx,eax
> 		add eax,edx
> 		shr eax,1
> 		shl eax,2
> 		shl ecx,2
> 		mov edx,a[eax]
> 		mov ebx,a[ecx]
> 		mov a[ecx],edx
> 		mov a[eax],ebx
> 		mov edx,tail
> 		shl edx,2
> 		mov eax,ecx
> 
> 	start:
> 		cmp eax,edx
> 		JGE end
> 		mov ebx,a[eax]
> 		
> 	loop1:				//while (i<j && a[i]<=a[j]) 
> 		cmp eax,edx
> 		JGE end
> 		cmp ebx,a[edx]
> 		JG endloop1
> 		sub edx,4
> 		jmp loop1
> 	endloop1:
> 
> 		mov ecx,a[edx]
> 		mov a[eax],ecx
> 		mov a[edx],ebx
> 		add eax,4
> 
> 	loop2:				//while (i<j && a[i]<=a[j]) 
> 		cmp eax,edx
> 		JGE end
> 		cmp a[eax],ebx
> 		JG endloop2
> 		add eax,4
> 		jmp loop2
> 	endloop2:
> 
> 		mov ecx,a[eax]
> 		mov a[edx],ecx
> 		mov a[eax],ebx
> 		sub edx,4
> 		jmp start
> 
> 	end:
> 		pop ebx
> 		shr eax,2
> 		push eax
> 
> 		dec eax
> 		push eax
> 		push head
> 		call qsort
> 		add esp,8
> 	
> 		pop eax
> 
> 		inc eax
> 		push tail
> 		push eax
> 		call qsort
> 		add esp,8
> 	over:
> 
> 	}
> 
> }
> 
> main(){
> 
> 	scanf("%d%d",&n,&c);
> 	int i;
> 	for (i=1;i<=n;i++)
> 		scanf("%d",a+i);
> 	qsort(1,n);
> 	min=1;
> 	max=(a[n]-a[1])/(c-1);
> 	best=min;
> 	dest=n*4;
> 	c--;
> 	_asm{
> 			push ebx
> 			mov eax,min
> 			mov edx,max
> 
> 		begin:
> 			cmp eax,edx
> 			JG  OK
> 			add edx,eax
> 			shr edx,1
> 			xor ecx,ecx
> 			mov eax,8
> 			xor ebx,ebx
> 
> 		loop3:
> 			cmp eax,dest
> 			JG cannot
> 			
> 			add ebx,a[eax]
> 			sub ebx,a[eax-4]
> 			add eax,4
> 			cmp ebx,edx
> 			JL loop3
> 			xor ebx,ebx
> 			inc ecx
> 			cmp ecx,c
> 			JGE can
> 			jmp loop3
> 
> 		cannot:
> 			dec edx
> 			mov max,edx
> 			mov eax,min
> 			jmp begin
> 
> 		can:
> 			cmp best,edx
> 			JGE notupdate
> 			mov best,edx
> 			
> 		notupdate:
> 			inc edx
> 			mov min,edx
> 			mov eax,edx
> 			mov edx,max
> 			jmp begin
> 
> 		OK:
> 			pop ebx
> 	}
> 	printf("%d\n",best);
> }

仰慕。。。汇编刷题。。

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator