#include <iostream>
#include <string>
#include <stack>
#include <fstream>
#include <cstring>
using namespace std;
string a[230], b[230];
int main ()
{
//freopen("data.in","r",stdin);
//freopen("data.out","w",stdout);
int k, n;
cin>>k;
while(k--)
{
stack<string> s;
cin>>n;cin.get();
for(int i = 0; i < n; i++)
getline(cin,a[i]);
for(int i = 0; i < n; i++)
getline(cin,b[i]);
// for(int i = 0, j = 0,flag = 0; i < n&&j < n; i++,j++)
// {
// while(!a[i].size())if(i<n-1)i++;
// while(!b[j].size())if(j<n-1)j++;
// if(a[i] != b[j]&&a[i].size())
// {
// flag ++;
// if(flag == 1)
// {
// for(int k = 0; k < i; k++) 错误思路害死人啊 原:1 2 3 4 5 6 7 8 9
// s.push(b[k]); 目:2 4 1 6 3 5 7 8 9
// } wrong:6 4 2
// s.push(b[j]); right:6 1 4 2
// for(int k = 0; k < n; k++) 思路一旦错。自己找实验样例都不容易啊!!!
// if(a[k] == b[j])a[k] = "";
//
// b[j] = "";
// i = -1;j = -1;
// }
// }
while(!s.empty())
{
cout<<s.top()<<endl;
s.pop();
}
cout<<endl;
}
return 0;
}
修改后:
#include <cstdio>
#include <cstring>
using namespace std;
int main ()
{
char a[230][85], b[85];
int k, n,num[230];;
scanf("%d",&k);
while(k--)
{
scanf("%d",&n);
getchar();
for(int i = 0; i < n; i++)gets(a[i]);
for(int i = 0; i < n; i++)
{
gets(b);
for(int j = 0; j < n; j++)
{
if(!strcmp(a[j],b))
{
num[i] = j;
break;
}
}
}
int i;
for(i = n-1; i >= 1; i--)
if(num[i]<num[i-1])break;
for(int j = i-1; j >= 0; j--)
puts(a[num[j]]);
printf("\n");
}
return 0;
}
UVA10152-龟壳排序
最新推荐文章于 2019-07-31 10:03:09 发布