UVa 10152 龟壳排序

思路:先读入的一列是原始串,后读入的一列是目标串。最少操作次数的方式是,从下到上,只对原始串进行删除而不放到最上面能得到的目标串的以最下元素开头的最长子串,然后将目标串剩余的那些按序放在最上方,即按由下到上的顺序输出即可。

Code:

//#define LOCAL
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

char name[210][90];
char target[210][90];
//char stack[210][90];

int main()
{
 #ifdef LOCAL
  freopen("10152.in","r",stdin);
  freopen("10152.out","w",stdout);
 #endif
 int k;
 scanf("%d",&k);
 while(k-->0)
 {
  memset(name,0,sizeof(name));
  memset(target,0,sizeof(target));
  int n;
  scanf("%d",&n);
  getchar();
  for(int i=0;i<n;++i)
   fgets(name[i],85,stdin);
  for(int i=0;i<n;++i)
   fgets(target[i],85,stdin);

  int a=n-1,b=n-1;
  //int top=-1;
  while(a>=0)
  {
   if(strcmp(target[b],name[a])==0) { a--; b--; }
   else  //{ strcpy(stack[++top],name[a--]); }
    a--;
  }//
  for(int i=b;i>=0;--i)
   fputs(target[i],stdout);
  fputs("\n",stdout);
 }
 return 0;
}

UVa 10152 龟壳排序,布布扣,bubuko.com

时间: 2024-10-13 02:12:06

UVa 10152 龟壳排序的相关文章

UVa 10152 - ShellSort 题解

按他的方法排序,每次移动一个数到顶点,排成需要的序列. Problem D: ShellSort He made each turtle stand on another one's back And he piled them all up in a nine-turtle stack. And then Yertle climbed up. He sat down on the pile. What a wonderful view! He could see 'most a mile! T

Ordering Tasks From:UVA, 10305(拓扑排序)

Ordering Tasks From:UVA, 10305 Submit Time Limit: 3000 MS      Special Judge John has n tasks to do. Unfortunately, the tasks are not independent and the execution of one task is only possible if other tasks have already been executed. Input The inpu

UVa 1606 (极角排序) Amphiphilic Carbon Molecules

如果,没有紫书上的翻译的话,我觉得我可能读不懂这道题.=_=|| 题意: 平面上有n个点,不是白点就是黑点.现在要放一条直线,使得直线一侧的白点与另一侧的黑点加起来数目最多.直线上的点可以看作位于直线的任意一侧. 分析: 首先假设直线经过两个点,否则可以移动直线使其经过两个点,并且总数不会减少. 所以,我们可以先枚举一个基点,然后以这个点为中心. 围绕基点将其他点按照极角排序,将直线旋转,统计符合要求的点的个数. 小技巧: 如果将所有的黑点以基点为中心做一个中心对称,则符合要求的点的个数就变成了

uva 755 (487--3279)排序

这是一简单的排序,之所以把这道题放上面呢,是因为我在这道题上实在wa太多了,wa了7次,中间找出来 个错误,就是在倒数第一个和倒数第二个相等的情况下我没有输出他们的个数,改正后还是wa,最后我发现原来是每组 数据之间输出一个空行.....坑了我好久,一直以为是每组后面都有空行... 放代码: #include<stdio.h> #include<stdlib.h> #include<string.h> //char a[100005]; char a[100005][1

UVa 10305 (拓扑排序) Ordering Tasks

题意: 经典的拓扑排序.有n个任务,然后某些任务必须安排在某些任务前面完成,输出一种满足要求的序列. 分析: 拓扑排序用离散里面的话来说就是将偏序关系拓展为全序关系.我们将“小于”这种关系看做一条有向边,如果得到的图是有向无环图DAG(Directed Acyclic Graph),则是存在拓扑排序的,如果存在有向环,则不存在拓扑排序. 注意输入数据里面m可能等于0的情况,就因为这个WA了两次. 1 //#define LOCAL 2 #include <iostream> 3 #includ

UVa 10152 - ShellSort

题目:给你一个现有字符串的序列,以及一个目标字符串的序列,每次操作可以把一个单词置顶, 问把当前串变成目标串,要操作几次. 分析:排序.因为每次可以使一个单词置顶,所以每个单词最多移动一次就可以变为目标串. 从后向前找到每个目标串元素对应元素的当前串位置(每个只能在"上一个"之前): 能找到的元素个数,就是不需要改动的个数,其他均要移动,对应目标串中剩余的元素: 剩余的目标串倒序输出,即为操作顺序. 定义两个指针分别从两串序列的尾部向头部移动,如果匹配成功同时前进: 不成功,当前传指针

UVa 1572 (拓扑排序) Self-Assembly

题意: 有n种正放形,每种正方形的数量可视为无限多.已知边与边之间的结合规则,而且正方形可以任意旋转和反转,问这n中正方形是否可以拼成无限大的图案. 分析: 首先因为可以旋转和反转,所以可以保证在拼接的过程中正方形不会自交. 把边的标号看成点,将正方形的边界A+变成B+可以看做是一条边.比如说,一个正方形中有A-和B+两条边,则A-与其他正方形中A+结合后,结合前边界为A-,结合后变为B+. 这样就得到图中的一条有向边A+ → B+ 如果能在图中找到一个环,则可以无限循环拼接正方形. 1 #in

ShellSort UVA 10152

说说: 题意大概就是开始有一堆的字符串堆栈A,其中的任何一个字符串都可以从当前位置移动到栈顶,经过若干字符串的移动,最后形成了另一个字符串堆栈B,要求输出按顺序输出移动字符串最少的移动方案.其实解法挺简单的,既然要求的是最少的移动,那么就从B的底部开始逐个在A中从底部往上查找,并且要在A中标记查找位置,因为A中已经被查找过的字符串必然是要移动的.如此重复,直到B在原堆栈中找不到可以不移动的字符串.最后,B中剩下的都是移动过的字符串.因为字符串只能移动到顶部,因此从B中的当前位置逐个向顶部输出字符

计划,,留

下面给出的题目共计560道,去掉重复的也有近500题,作为ACMer Training Step1,用1年到1年半年时间完成.打牢基础,厚积薄发. 一.UVaOJ http://uva.onlinejudge.org 西班牙Valladolid大学的程序在线评测系统,是历史最悠久.最著名的OJ. 一.<算法竞赛入门经典> 刘汝佳 (UVaOJ 351道题) 以下部分内容摘自:http://sdkdacm.5d6d.com/thread-6-1-1.html "AOAPC I"