Sicily/1392. Frugal Search

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

要求:

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 }

转载于:https://www.cnblogs.com/congzc/archive/2011/07/28/2329934.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值