E - As Easy As A+B
[by_041]
题目理解
-
首先,这道题目的名字引起了我的注意,所以就先E跳了俩题来慰问他
-
排序模板题?? 1 ≤ n ≤ 1000 1\le n\le1000 1≤n≤1000??
-
出于信仰打一个快排吧、
#include<cstdio>
int m,n,a[1001];
void swp(int&a,int&b)
{a^=b;b^=a;a^=b;return;}
void qs(int l,int r)
{
if(l==r)return;
int i=l,j=r,mid=a[l+r>>1];
while(a[i]<mid)i++;
while(a[j]>mid)j--;
while(i<j)
{
swp(a[i],a[j]);
while(a[i]<mid)i++;
while(a[j]>mid)j--;
}
// for(int i=1;i<=n;i++)
// printf("%d ",a[i]);
// putchar('\n');
qs(l,i);
qs(i+1,r);
return;
}
int main()
{
scanf("%d",&m);
while(m--)
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",a+i);
qs(1,n);
for(int i=1;i<=n;i++)
printf("%d ",a[i]);
putchar('\n');
}
return 0;
}
- 哦豁,超时!!
- 优化一下,嘻嘻
#include<cstdio>
#include<algorithm>
int m,n,a[1001];
void swp(int&a,int&b)
{a^=b;b^=a;a^=b;return;}
void qs(int l,int r)
{
if(l==r)return;
int i,j=r,mid=a[l+r>>1];
for(i=l;i<r;i++)
if(a[i]>a[i+1])
break;
if(i==r)return;
i=l;
while(a[i]<mid)i++;
while(a[j]>mid)j--;
while(i<j)
{
swp(a[i],a[j]);
while(a[i]<mid)i++;
while(a[j]>mid)j--;
}
// for(int i=1;i<=n;i++)
// printf("%d ",a[i]);
// putchar('\n');
qs(l,i);
qs(i+1,r);
return;
}
int main()
{
scanf("%d",&m);
while(m--)
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d",a+i);
// qs(1,n);
std::sort(a+1,a+n+1);//你什么都没看到
for(int i=1;i<n;i++)
printf("%d ",a[i]);
printf("%d",a[n]);//结尾没空行的防PE操作
putchar('\n');
}
return 0;
}
A🤫