| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:用快排超时,,求解In Reply To:用快排超时,,求解 Posted by:liuwenxian at 2010-05-27 20:16:19 > #include<iostream>
> using namespace std;
> int data[100000]={0};
> void swap(int &a,int &b)
> {
> int temp;
> temp=a;
> a=b;
> b=temp;
> }
> int partion(int i,int j)
> {
> int mark=i,x=data[i];
> for(int k=i+1;k<=j;k++)
> {
> if(data[k]<x)
> {
> mark++;
> if(mark!=k)swap(data[mark],data[k]);
> }
> }
> if(i!=mark)swap(data[i],data[mark]);
> return mark;
> }
> void quicksort(int i,int j)
> {
> if(i<j)
> {
> int q=partion(i,j);
> quicksort(i,q-1);
> quicksort(q+1,j);
> }
> }
> void outputdigit(int x)
> {
> int out[7];
> for(int i=6;i>=0;i--)
> {
> out[i]=x%10;
> x=x/10;
> }
> for(int i=0;i<7;i++)
> {
> printf("%d",out[i]);
> if(i==2)printf("-");
> }
> }
>
> void output(void)
> {
> int num=1,i;
> bool flag=false;
> for(i=2;i<=data[0];i++)
> {
> if(data[i]==data[i-1])
> {
> num++;
> flag=true;
> }
> else
> {
> if(num>1)
> {
> outputdigit(data[i-1]);
> printf(" %d\n",num);
> }
> num=1;
> }
> }
> if(num>1)
> {
> outputdigit(data[i-1]);
> printf(" %d\n",num);
> }
> if(!flag)
> printf("No duplicates.\n");
> }
> void input(void)
> {
> int n,i=1;
> cin>>n;
> while(n>100000)
> {
> cin>>n;
> }
> data[0]=n;
> while(i<=n)
> {
> int num=7,temp=0;
> while(num)
> {
> char x;
> cin>>x;
> if(x!='-')
> {
> if(x>='0'&&x<='9')
> temp=temp*10+x-'0';
> else if(x>='A'&&x<'Z')
> {
> if(x<'Q')
> temp=temp*10+(x-'A')/3+2;
> else temp=temp*10+(x-'Q')/3+7;
> }
> num--;
> }
> }
> data[i]=temp;
> i++;
> }
> }
> int main()
> {
> input();
> quicksort(1,data[0]);
> //system("pause");
> output();
> //system("pause");
> return 0;
>
> }
哎,我快排也超市啊
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator