poj 3098 Frugal Search

poj 3098 Frugal Search,第1张

poj 3098 Frugal Search
#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <algorithm>using namespace std;#define maxn 101struct Term{    int s[maxn];    char ch[maxn];}term[maxn];string word[maxn];string st;int n, m, termnum[maxn];bool input(){    int i = 0;    while (1)    {        getline(cin, word[i]);        if (word[i] == "#") return false;        if (word[i] == "*") break;        i++;    }    n = i;    return true;}void getterm(string &a, Term &term, int &num){    int i = 0, j = 0;    while (i < a.length())    {        if (a[i] != '-' && a[i] != '+')        { term.ch[j] = a[i]; term.s[j] = 1; i++; j++; continue;        }        if (a[i] == '-') term.s[j] = 0;        if (a[i] == '+') term.s[j] = 2;        i++;        term.ch[j] = a[i];        i++;        j++;    }    num = j;}void maketerms(){    int temp;    int i = 0;    temp = st.find('|');    while (temp != string::npos)    {        string sub = st.substr(0, temp);        getterm(sub, term[i], termnum[i]);        st.erase(0, temp + 1);        i++;        temp = st.find('|');    }    getterm(st, term[i], termnum[i]);    m = i + 1;}bool match(string &word, Term &term, int &num){    for (int i = 0; i < num; i++)        if (term.s[i] == 0 && word.find(term.ch[i]) != string::npos) return false;    for (int i = 0; i < num; i++)        if (term.s[i] == 2 && word.find(term.ch[i]) == string::npos) return false;    for (int i = 0; i < num; i++)        if (term.s[i] == 1 && word.find(term.ch[i]) != string::npos) return true;    return false;}int main(){        while (1)    {        if (!input()) break;        sort(word, word + n);        while (getline(cin, st) && st != "**")        { bool found = false; maketerms(); for (int i = 0; i < n; i++) {     for (int j = 0; j < m; j++)         if (match(word[i], term[j], termnum[j]))         {  found = true;  cout << word[i] << endl;  break;         }     if (found)         break; } if (!found)     cout << "NONE" << endl;        }        cout << "$" << endl;    }    return 0;}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4891493.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-12
下一篇 2022-11-12

发表评论

登录后才能评论

评论列表(0条)

保存