代码改变世界

Sicily/1392. Frugal Search

2011-07-28 01:05  Min·zc  阅读(157)  评论(0编辑  收藏  举报

字符串处理,要求找出满足条件的字典序最小的单词

要求:

1.结果单词至少含有查询单词的一个字母

2.如果字母在‘+’后面,那么这个字母必须出现在结果单词中

3.如果字母在‘-’后面,那么这个字母必须不能出现在结果单词中

4.在一个查询中可以包含多个单词,多个单词使用‘|’分割,只要其中的一个单词满足就可以


变量get表示单词是否满足条件1

变量los表示单词是否满足条件2和3


 1 #include <set>

 2 #include <iostream>
 3 #include <string>
 4 using namespace std;
 5 int main()
 6 {
 7         char x;
 8         string word;
 9         while(true)
10         {
11                 set<string> s;
12                 cin>>word;
13                 if(word=="#")
14                         break;
15                 while(word!="*")
16                 {
17                         s.insert(word);
18                         cin>>word;
19                 }
20                 cin>>word;
21                 while(word!="**")
22                 {
23                         set<string>::iterator si;
24                         int len=word.size();
25                         int los=0;
26                         int get=0;
27                         for(si=s.begin();si!=s.end();si++)
28                         {
29                                 get=0;
30                                 los=0;
31                                 int func=0;
32                                 for(int i=0;i!=len;i++)
33                                 {
34                                         if(word[i]=='+')
35                                         {
36                                                 func=1;
37                                                 continue;
38                                         }
39                                         if(word[i]=='-')
40                                         {
41                                                 func=2;
42                                                 continue;
43                                         }
44                                         if(word[i]=='|'&&(los==1||get==0))
45                                         {
46                                                 los=0;
47                                                 func=0;
48                                                 get=0;
49                                                 continue;
50                                         }
51                                         int len2=(*si).size();
52                                         if(los==0)
53                                         {
54                                                 if(func==0&&get==0)
55                                                 {
56                                                         for(int j=0;j!=len2;j++)
57                                                                 if((*si)[j]==word[i])
58                                                                         get=1;
59                                                 }
60                                                 if(get==1&&func==1)
61                                                 {
62                                                         int f=0;
63                                                         for(int j=0;j!=len2;j++)
64                                                                 if((*si)[j]==word[i])
65                                                                         f=1;
66                                                         if(f==0)
67                                                                 los=1;
68                                                 }
69                                                 if(get==1&&func==2)
70                                                 {
71                                                         int f=0;
72                                                         for(int j=0;j!=len2;j++)
73                                                                 if((*si)[j]==word[i])
74                                                                         f=1;
75                                                         if(f==1)
76                                                                 los=1;
77                                                 }
78                                         }
79                                         //cout<<get<<" "<<los<<" "<<word[i]<<" "<<(*si)[2]<<endl;
80                                 }
81                                 if(get==0)
82                                         los=1;
83                                 if(los==0)
84                                 {
85                                         cout<<(*si)<<endl;
86                                         break;
87                                 }
88                         }
89                         if(los==1)
90                                 cout<<"NONE"<<endl;
91                         cin>>word;
92                 }
93                 cout<<"$"<<endl;
94         }
95 }