浙大月赛 由于zoj貌似不存代码,那俺就贴博客上好了…… http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3301 #include<iostream> using namespace std; struct point { int num; int value; }po[10050]; struct part { int a; int b; }pa[10050]; int cmp1(point a,point b) { if(a.value==b.value) return a.num<b.num; return a.value<b.value; } int cmp2(part x,part y) { return x.a<y.a; } int main() { int n,i,k,flag=0; while(scanf("%d",&n)!=EOF) { if(flag)printf("/n"); for(i=0;i<n;i++) { scanf("%d",&po[i].value); po[i].num=i; } std::sort(po,po+n,cmp1); k=0; for(i=0;i<n-1;) { pa[k].a=po[i++].num+1; pa[k++].b=po[i++].num+1; } std::sort(pa,pa+k,cmp2); for(i=0;i<k;i++) printf("%d %d/n",pa[i].a,pa[i].b); flag=1; } return 0; }