题目:点击打开链接
字符串+模拟题,主要在构造好数据结构,重载自定义结构的<,然后再调用STL的sort就好了
注意输入输出格式,特别是用scanf和gets混用的时候,scanf后会把 ‘\n' 留在缓冲区,getchar后再gets就OK了。
另外,hdu的G++编译出错,错在重载的bool operator<(const struct str& opt) 上,去掉了struct和换成STR都不行,用C++编译就AC了。
0MS 268K
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef struct str
{
char s[51];
int num;
int seq;
str::str(){seq=num=0; memset(s, '\0', sizeof(s));}
void initnum(){
num=0;
for(int i=0; i<strlen(s); ++i)
{
for(int j=i+1; j<strlen(s); ++j)
{
if(s[i]>s[j])
++num;
}
}
}
bool operator<(const struct str& opt){
if(num==opt.num)
return seq<opt.seq;
return num<opt.num;
}
}STR;
STR line[101];
int main()
{
int T, n, m;
//freopen("in.txt", "r", stdin);
scanf("%d", &T);
for(int cnt=0; cnt<T; ++cnt)
{
cnt > 0 ? (getchar(), puts("")) : 0;
scanf("%d %d", &n, &m);
getchar();
for(int i=0; i<m; ++i)
{
gets(line[i].s);
line[i].seq = i;
line[i].initnum();
}
sort(line, line+m);
for(int i=0; i<m; ++i)
puts(line[i].s);
}
return 0;
}