P9472 题解
通过简单证明可知,任意两个数列的首项和第二项一定有一个不同(若首项相同,但公差不同,所以第二项不会相同),因此当 时只需先比较首项,若相等再比较第二项即可。当 时首项相同按输入顺序排序即可。
注意 可以为负数,如果首项相等比较公差只有 70pts。
#include<iostream>
#include<algorithm>
using namespace std;
int n,m;
struct node{
int x,n;
}a[100005];
bool cmp(node a,node b){
if(a.x==b.x){
if(m!=1){
return 1ll*a.x*a.n<1ll*b.x*b.n;
}else{
return a.n<b.n;
}
}
return a.x<b.x;
}
int main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>a[i].x;
a[i].n=i;
}
sort(a+1,a+1+n,cmp);
for(int i=1;i<=n;i++){
cout<<a[i].n<<' ';
}
return 0;
}