UVA10152-龟壳排序

#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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值