问题标题: 酷町堂:1281 打字游戏(game)

0
0
已解决
张云瀚
张云瀚
初级天翼
初级天翼

题目链接: 酷町堂:1281

#include<iostream>
#include<algorithm>
using namespace std;
int n;
struct node{
    string a,b;
}c[505]; 
bool cmp(node x,node y){
    if(x.b!=y.b){
        return x.b<y.b;
    }
    return x.b>y.b;
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>c[i].a>>c[i].b;
    }
    sort(c+1,c+n+1,cmp);
    for(int i=1;i<=n;i++){
        cout<<c[i].a<<endl;
    }
    return 0;
}
 


0
已采纳
熊潇然
熊潇然
初级启示者
初级启示者

同学您好

 

cmp 函数中你要先按 长度排序,再按 字典序排序

如果 x . b . size ( ) != y . b . size ( ) {

   return  x . b . size ( ) > y . b . size ( )

}

return x . b > y . b

 

望 采纳√

0
0
陈俊霖
陈俊霖
新手天翼
新手天翼

cmp错了,错的很严重

cmp应该先比较长度,不一样长返回x.b.size()>y.b.size()

否则比较b字典序,不同返回x.b>y.b

最后返回x.a>y.a

伪代码:

如果x.b.size()不等于y.b.size()

    返回x.b.size()>y.b.size()

如果x.b不等于y.b

    返回x.b>y.b

返回x.a>y.a

其他都对

 

我要回答