NC21685. Race Sorting
描述
那么对于tokitsukaze拥有的n个单位,做完给定先后顺序的Race Sorting后,n个单位的顺序是什么?请按顺序输出每个单位的编号。
输入描述
第一行包含一个正整数T(T≤20),表示T组数据。
对于每一组数据:
第一行包含一个正整数n(1≤n≤1000),表示有n个单位。
接下来n行,每行输入格式为:ID is race
其中,ID为一个正整数(1≤ID≤n),数据保证ID唯一。race为一个字符串,保证是"Terran","Zerg","Protoss"三种中的一种(没有引号)。
最后一行包含一个字符串,格式为:race1,race2,race3。表示3种种族的先后顺序。
数据保证race1,race2,race3为"Terran","Zerg","Protoss"的一种排列(没有引号)。
详情请见样例。
输出描述
对于每组数据:
按race1,race2,race3的顺序,在一行输出排序后的ID序列,两个ID用空格隔开,行末无多余空格。
示例1
输入:
3 5 1 is Terran 2 is Zerg 3 is Zerg 4 is Protoss 5 is Terran Zerg,Terran,Protoss 5 1 is Terran 3 is Zerg 2 is Zerg 4 is Protoss 5 is Terran Zerg,Terran,Protoss 1 1 is Protoss Zerg,Protoss,Terran
输出:
2 3 1 5 4 3 2 1 5 4 1
C++14(g++5.4) 解法, 执行用时: 18ms, 内存消耗: 760K, 提交时间: 2019-02-13 12:20:29
#include <iostream> #include <cstdio> #include <string> using namespace std; int main() { int T; cin>>T; while(T--) { char f[1005]; int a[1005],i,j; int n; scanf("%d",&n); for(i=0;i<n;i++) { char t[30]; scanf("%d is %s",&a[i],t); f[i]=t[0]; } string s; cin>>s; for(i=0;i<s.size();i++) { for(j=0;j<n;j++) { if(f[j]==s[i]) printf("%d ",a[j]); } } cout <<"\n"; } return 0; }
C(clang 3.9) 解法, 执行用时: 10ms, 内存消耗: 680K, 提交时间: 2018-12-08 18:45:26
#include <stdio.h> #include <string.h> int main() { int n,m,j,i; char s[30],f[1000]; int t[1000]; scanf("%d",&n); while(n--) { scanf("%d",&m); for(i=1;i<=m;i++) { scanf("%d is %s",&t[i],s); f[i]=s[0]; } scanf("%s",s); for(i=0;i<=strlen(s)-1;i++) { if(s[i]=='Z'||s[i]=='T'||s[i]=='P') { for(j=1;j<=m;j++) { if(f[j]==s[i]) printf("%d ",t[j]); } } } printf("\n"); } }
C++11(clang++ 3.9) 解法, 执行用时: 12ms, 内存消耗: 608K, 提交时间: 2018-12-16 19:51:35
#include <iostream> #include <cstdio> #include <string> using namespace std; int main() { int T; cin>>T; while(T--) { char f[1005]; int a[1005],i,j; int n; scanf("%d",&n); for(i=0;i<n;i++) { char t[30]; scanf("%d is %s",&a[i],t); f[i]=t[0]; } string s; cin>>s; for(i=0;i<s.size();i++) { for(j=0;j<n;j++) { if(f[j]==s[i]) printf("%d ",a[j]); } } cout <<"\n"; } return 0; }
Python3(3.5.2) 解法, 执行用时: 77ms, 内存消耗: 4040K, 提交时间: 2019-04-05 10:16:09
T = int(input()) for case in range(T): n=int(input()) data=[] for i in range(n): data.append(input().split(" is ")) od=input().split(",") ans=[] for i in od: for j in data: if i==j[1]: ans.append(j[0]) print(' '.join(ans))