题目大意:把第一个序列按第二个序列那样排序,移动的话是把地一个序列的元素放到最上面
解体思路:难在怎样才能移动,移动的话是你当前这个的下面有比他还小1的
#include<cstdio>
#include<cstring>
struct code {
int number;
char str[100];
};
int main() {
int test;
scanf("%d", &test);
code c[1000];
for(int time = 0; time < test; time++) {
int num;
scanf("%d", &num);
// printf("num is %d\n", num);
getchar();
for(int i = 0; i < num; i++) {
gets(c[i].str);
}
int q[1000];
char str[1000];
memset(str,'\0',sizeof(str));
for(int i = 0; i < num; i++) {
gets(str);
for(int j = 0; j < num; j++)
if(strcmp(str,c[j].str) == 0) {
q[j] = i;
c[j].number = i;
break;
}
memset(str,'\0',sizeof(str));
}
/* for(int i = 0; i < num; i++) {
printf("str is %s\t",c[i].str);
printf("num is %d\n",c[i].number);
}
*/
// for(int i = 0; i < num; i++)
// printf("%d\n", q[i]);
for(int i = num - 1; i >= 0; i--) {
int mark = 0;
int n;
for(int j = 0; j < num; j++)
if(q[j] == i) {//找到最大数
for(int k = j; k < num; k++)
if(q[k] == i - 1) {
mark = k;
n = q[k];
break;
}
break;
}
if(mark != 0) {
for(int j = mark; j > 0 ; j--)
q[j] = q[j - 1];
q[0] = n;
for(int j = 0; j < num; j++)
if(c[j].number == q[0])
printf("%s\n", c[j].str);
}
}
printf("\n");
}
return 0;
}