欢乐赛#68 T6 题解
2026-03-09 22:47:06
发布于:北京
5阅读
0回复
0点赞
cmp 大法好!
排序规则题目说得很清楚了。
众所周知,一个数 的位数为 。
但也可以不加一,所以一个数 的位数是奇数当且仅当 ,一个数 的位数是偶数当且仅当 。
#include <bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int n;
int a[N];
bool cmp(int x,int y){
if ((int)log10(x)%2!=(int)log10(y)%2){//位数奇偶性不同
return (int)log10(x)%2<(int)log10(y)%2;//位数为奇数排在位数为偶数前
}
if ((int)log10(x)%2){//x 位数为偶数
return x>y;//从大到小
}
return x<y;//从小到大
}
int main(){
cin>>n;
for (int i=1;i<=n;i++){
cin>>a[i];
}
sort(a+1,a+n+1,cmp);
for (int i=1;i<=n;i++){
cout<<a[i]<<' ';
}
return 0;
}
这里空空如也







有帮助,赞一个