UVa 10152 - ShellSort
2013-05-07 23:06
148 查看
题目大意:给一个栈,从上到下可以表示成一个序列,可以对其进行如下操作:将其中一个元素移到顶部。给你一个初始序列和目的序列,求让初始序列变为目的序列的最小操作次数,给出一个可能的操作步骤。
将目的序列从0到n-1进行编号,然后按这个<字符串,号码>元组对初始序列编号,得到一个序列s,对序列s从右向左扫描,找出从n-1开始的递减序列(递减值为1),将不在这个递减序列里的数剔除出来并排序,从大到小输出编号对应的字符串就行。代码如下:
View Code
将目的序列从0到n-1进行编号,然后按这个<字符串,号码>元组对初始序列编号,得到一个序列s,对序列s从右向左扫描,找出从n-1开始的递减序列(递减值为1),将不在这个递减序列里的数剔除出来并排序,从大到小输出编号对应的字符串就行。代码如下:
View Code
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 200+10; char name[maxn][90]; int main() { #ifdef LOCAL freopen("in", "r", stdin); #endif int K, n; scanf("%d", &K); while (K--) { scanf("%d", &n); getchar(); for(int i = 0; i < n; i++) gets(name[i]); int order[maxn], index[maxn]; char s[90]; for(int i = 0; i < n; i++) { gets(s); for(int j = 0; j < n; j++) if(strcmp(s, name[j]) == 0) { order[j] = i; index[i] = j; break; } } int p = n-1; int len = 0; int drop[maxn]; for(int i = n-1; i >= 0; i--) { if(order[i] == p) p--; else drop[len++] = order[i]; } sort(drop, drop+len); for(int i = len-1; i >= 0; i--) { printf("%s\n", name[index[drop[i]]]); } printf("\n"); } return 0; }
相关文章推荐
- UVa 10152 - ShellSort
- 数据结构 uva-10152 - ShellSort
- UVa 10152 - ShellSort
- UVA 10152 ShellSort
- UVa 10152 - ShellSort
- UVa 10152 - ShellSort
- UVA10152- ShellSort
- UVa 10152 ShellSort
- uva-10152 - ShellSort
- UVA - 10152 ShellSort
- UVA - 10152 ShellSort
- uva10152 ShellSort
- UVa 10152 - ShellSort
- uva10152-ShellSort
- UVA 10152 (暑期-线性表-E- ShellSort)
- Uva 10152 ShellSort
- uva10152 ShellSort
- uva 10152 shellsort
- UVA 10152 - ShellSort
- uva 10152 ShellSort