标签:
http://acm.hdu.edu.cn/showproblem.php?pid=1113
给定一个字典,然后每次输入一个字符串问字典中是否有单词与给定的字符串的所有字母一样(顺序可以打乱),按字典序输出字典中的原字符串。
我开始是直接用了 sort, 用一个结构体记录了所有字符串,和相应下标,输出的时候在用了冒泡排序。
1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 #include <vector> 5 #include <cstring> 6 #include <string> 7 #include <algorithm> 8 #include <string> 9 #include <set> 10 #include <functional> 11 #include <numeric> 12 #include <sstream> 13 #include <stack> 14 #include <map> 15 #include <queue> 16 #pragma comment(linker, "/STACK:102400000,102400000") 17 #define CL(arr, val) memset(arr, val, sizeof(arr)) 18 19 #define ll long long 20 #define inf 0x7f7f7f7f 21 #define lc l,m,rt<<1 22 #define rc m + 1,r,rt<<1|1 23 #define pi acos(-1.0) 24 25 #define L(x) (x) << 1 26 #define R(x) (x) << 1 | 1 27 #define MID(l, r) (l + r) >> 1 28 #define Min(x, y) (x) < (y) ? (x) : (y) 29 #define Max(x, y) (x) < (y) ? (y) : (x) 30 #define E(x) (1 << (x)) 31 #define iabs(x) (x) < 0 ? -(x) : (x) 32 #define OUT(x) printf("%I64d\n", x) 33 #define lowbit(x) (x)&(-x) 34 #define Read() freopen("a.txt", "r", stdin) 35 #define Write() freopen("b.txt", "w", stdout); 36 #define maxn 1000000000 37 #define N 2510 38 #define mod 1000000000 39 using namespace std; 40 41 struct node 42 { 43 string s[105]; 44 int x; 45 }; 46 node s1,s2,s3; 47 int main() 48 { 49 //freopen("a.txt","r",stdin); 50 int n=0; 51 string str; 52 while(cin>>str) 53 { 54 if(str=="XXXXXX")break; 55 s1.s[n++]=str; 56 } 57 //cout<<n<<endl; 58 for(int i=0;i<n;i++) 59 { 60 s2.s[i]=s1.s[i]; 61 sort(s1.s[i].begin(),s1.s[i].end()); 62 } 63 while(cin>>str) 64 { 65 if(str=="XXXXXX") break; 66 sort(str.begin(),str.end()); 67 bool flag=0; 68 int k=0; 69 for(int j=0;j<n;j++) 70 if(str==s1.s[j]) 71 { 72 flag=1; 73 s3.s[k++]=s2.s[j]; 74 } 75 for(int i=0;i<k;i++) 76 for(int j=i+1;j<k;j++) 77 { 78 if(s3.s[i]>s3.s[j]) 79 { 80 str=s3.s[i]; 81 s3.s[i]=s3.s[j]; 82 s3.s[j]=str; 83 } 84 } 85 for(int i=0;i<k;i++) 86 cout<<s3.s[i]<<endl; 87 if(!flag) cout<<"NOT A VALID WORD"<<endl; 88 cout<<"******"<<endl; 89 } 90 return 0; 91 }
也可以直接sort排序,定义一个结构体,保存原字符串和排序后的字符串,先对所有字符串按照字典序排,这样先输出的就是字典序小的。
1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 #include <vector> 5 #include <cstring> 6 #include <string> 7 #include <algorithm> 8 #include <string> 9 #include <set> 10 #include <functional> 11 #include <numeric> 12 #include <sstream> 13 #include <stack> 14 #include <map> 15 #include <queue> 16 #pragma comment(linker, "/STACK:102400000,102400000") 17 #define CL(arr, val) memset(arr, val, sizeof(arr)) 18 19 #define ll long long 20 #define inf 0x7f7f7f7f 21 #define lc l,m,rt<<1 22 #define rc m + 1,r,rt<<1|1 23 #define pi acos(-1.0) 24 25 #define L(x) (x) << 1 26 #define R(x) (x) << 1 | 1 27 #define MID(l, r) (l + r) >> 1 28 #define Min(x, y) (x) < (y) ? (x) : (y) 29 #define Max(x, y) (x) < (y) ? (y) : (x) 30 #define E(x) (1 << (x)) 31 #define iabs(x) (x) < 0 ? -(x) : (x) 32 #define OUT(x) printf("%I64d\n", x) 33 #define lowbit(x) (x)&(-x) 34 #define Read() freopen("a.txt", "r", stdin) 35 #define Write() freopen("b.txt", "w", stdout); 36 #define maxn 1000000000 37 #define N 2510 38 #define mod 1000000000 39 using namespace std; 40 41 struct node 42 { 43 char s1[105],s2[105]; 44 int id; 45 bool operator < (const node a) const 46 { 47 return strcmp(s1,a.s1)<0; 48 } 49 }p[105]; 50 51 int main() 52 { 53 // freopen("a.txt","r",stdin); 54 char str[105]; 55 int n=0; 56 while(~scanf("%s",p[n].s1)) 57 { 58 if(strcmp(p[n].s1,"XXXXXX")==0) break; 59 strcpy(p[n].s2,p[n].s1); 60 n++; 61 } 62 sort(p,p+n); //先对 所有字符串按照字典序排序 63 for(int i=0;i<n;i++) 64 { 65 int l=strlen(p[i].s1); 66 sort(p[i].s1,p[i].s1+l); //再对 每个字符串排序 67 } 68 while(~scanf("%s",str)) 69 { 70 if(strcmp(str,"XXXXXX")==0) break; 71 int l=strlen(str); 72 sort(str,str+l); 73 bool flag=0; 74 for(int j=0;j<n;j++) 75 if(strcmp(p[j].s1,str)==0) 76 { 77 flag=1; 78 printf("%s\n",p[j].s2); 79 } 80 if(!flag) printf("NOT A VALID WORD\n"); 81 printf("******\n"); 82 } 83 return 0; 84 }
hdu - 1113 Word Amalgamation (stl)
标签:
原文地址:http://www.cnblogs.com/nowandforever/p/4551263.html