zoukankan      html  css  js  c++  java
  • uva 10152 ShellSort

    //这个算法用到了“相对位置”的思想,并且就本题而言还有一个很重要的结论就是,假设

    //移动了k个元素,那么这k个元素一定是最后结果的那个序列的前k个元素,而且易知,

    //越先移动的元素一定会越被压在移动的元素的底部

    首先找到需要移动的字符串,方法如下:以初始序列为准,设初始序列下标为i, 目的序列下标为j, 从n-1开始,如果两下标对应的字符串相等,下标同时减一,否则仅初始序列下标减一。那么目的序列中还未被成功匹配的字符串就是需要移动的字符串。要使移动次数最少,显然应该按未被处理的目的序列中字符串逆序移动(输出)。

     

    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<string>
    #include<algorithm>
    using namespace std;
    const int N=210;
    char orginal[N][100];
    char required[N][100];
    
    int main()
    {
            int T;
            scanf("%d", &T); getchar();
            while(T--)
            {
                    int n, i, j;
                    scanf("%d", &n); getchar();//忽略换行,不然gets会返还空串
                    for(i=0; i<n;i++)
                    {
                            gets(orginal[i]);
                    }
                    for(i=0; i<n;i++)
                    {
                            gets(required[i]);
                    }
    
                    for(i=j=n-1; i>=0;i--)
                    {
                            if(!strcmp(orginal[i], required[j]))
                                    j--;
                    }
    
                    for(;j>=0;j--)
                            puts(required[j]);
                    printf("
    ");
    
            }
    
        return 0;
    }
  • 相关阅读:
    高可用、高并发浅析
    正则表达式笔记
    linux下通过脚本切换当前工作目录
    nginx学习笔记
    二进制安全
    负载均衡相关
    有用的shell命令
    TCP服务器/客户端代码示例
    UDP服务器/客户端代码示例
    GCC链接的几个注意点
  • 原文地址:https://www.cnblogs.com/cute/p/3613066.html
Copyright © 2011-2022 走看看