题意:有N段长为M的子串,要求将子串按照子串逆序数从小到大的顺序输出。
分析:难度不大,主要就是一点小问题的处理,Since
开始在输出的时候少了一小行防止重复出现的代码,于是就WA了。
另外,我的思路,是用数组先存所有逆序数,然后再排序,所以,原始的数组要保留一下,用另外一个数组copy就行。
贴下代码:(204k,0ms)
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n
,
m;
cin
>>n
>>
m;
int
i
,
j
,
k;
int
times;
char
t
[
105
][
55
];
int
num
[
105
]
=
{
0
};
int
temp
[
105
]
=
{
0
};
for(
times
=
0;
times
<
m;
times
++)
{
for(
i
=
0;
i
<n;
i
++)
cin
>>
t
[
times
][
i
];
for(
j
=
0;
j
<n;
j
++)
for(
k
=
j
+
1;
k
<n;
k
++)
if(
t
[
times
][
j
]
>
t
[
times
][
k
])
num
[
times
]
++;
temp
[
times
]
=
num
[
times
];
}
sort(
num
,
num
+
m);
for(
i
=
0;
i
<
m;
i
++)
{
for(
times
=
0;
times
<
m;
times
++)
{
if(
temp
[
times
]
==
num
[
i
])
for(
k
=
0;;
k
++)
{
cout
<<
t
[
times
][
k
];
if(
k
==n
-
1)
{
cout
<<
endl;
temp
[
times
]
=-
1;
break;
}
}
}
}
}
#include<algorithm>
using namespace std;
int main()
{
}
对最后一段代码的解释:temp[times]也是从小到大的方式一点点查的,所以如果有两个相同的话肯定是按照顺序先输出第一个,然后输完后要把这一个temp[times]重新设置个负数,这样的话就不会再重复
收获:重新温习了一下逆序数的求法,防重复的方法一开始也没想到,经过和别人交流才想到,对于这些基础的题目的掌握还不是特别的熟练,思路还不够开阔,刷的题目太少太少,要不断进步,不断学习。这几天因为兼职和做家教的缘故,自己对自己有很明显的放纵,总是想偷懒,必须迅速改变这种状态,不可让这种恶习持续!