题意:
给定英语语法的句法,问所给句子是否符合这些句法
1.只有SI SIO两种句子结构
2.名词前面必须有冠词
3.形容词修饰名词必须放在冠词和名词中间
4.副词修饰动词放在前面
5.介词短语可以放在任何位置
6.介词短语由介词+名词/代词构成,一句只能有一个介词短语
7.任意两个语法成分间不能交叉
8.S O只能由名词或代词担任
9.v既可以及物也可以不及物
分析:
把所有可能搜出来,打个表,然后就处理字符串,map搞下就好啦
表是我从discuss里扒的 QAQ
分析:
//
// Created by TaoSama on 2015-11-03
// Copyright (c) 2015 TaoSama. All rights reserved.
//
//#pragma comment(linker, "/STACK:1024000000,1024000000")
#include <algorithm>
#include <cctype>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iomanip>
#include <iostream>
#include <map>
#include <queue>
#include <string>
#include <set>
#include <vector>
using namespace std;
#define pr(x) cout << #x << " = " << x << " "
#define prln(x) cout << #x << " = " << x << endl
const int N = 1e5 + 10, INF = 0x3f3f3f3f, MOD = 1e9 + 7;
const char *sentences[408] = {
"pron.v.",
"pron.vi.",
"pron.adv.v.",
"pron.adv.vi.",
"art.n.v.",
"art.n.vi.",
"art.n.adv.v.",
"art.n.adv.vi.",
"art.adj.n.v.",
"art.adj.n.vi.",
"art.adj.n.adv.v.",
"art.adj.n.adv.vi.",
"prep.pron.pron.v.",
"prep.pron.pron.vi.",
"prep.pron.pron.adv.v.",
"prep.pron.pron.adv.vi.",
"prep.pron.art.n.v.",
"prep.pron.art.n.vi.",
"prep.pron.art.n.adv.v.",
"prep.pron.art.n.adv.vi.",
"prep.pron.art.adj.n.v.",
"prep.pron.art.adj.n.vi.",
"prep.pron.art.adj.n.adv.v.",
"prep.pron.art.adj.n.adv.vi.",
"prep.art.n.pron.v.",
"prep.art.n.pron.vi.",
"prep.art.n.pron.adv.v.",
"prep.art.n.pron.adv.vi.",
"prep.art.n.art.n.v.",
"prep.art.n.art.n.vi.",
"prep.art.n.art.n.adv.v.",
"prep.art.n.art.n.adv.vi.",
"prep.art.n.art.adj.n.v.",
"prep.art.n.art.adj.n.vi.",
"prep.art.n.art.adj.n.adv.v.",
"prep.art.n.art.adj.n.adv.vi.",
"pron.prep.pron.v.",
"pron.prep.pron.vi.",
"pron.prep.pron.adv.v.",
"pron.prep.pron.adv.vi.",
"pron.prep.art.n.v.",
"pron.prep.art.n.vi.",
"pron.prep.art.n.adv.v.",
"pron.prep.art.n.adv.vi.",
"art.n.prep.pron.v.",
"art.n.prep.pron.vi.",
"art.n.prep.pron.adv.v.",
"art.n.prep.pron.adv.vi.",
"art.n.prep.art.n.v.",
"art.n.prep.art.n.vi.",
"art.n.prep.art.n.adv.v.",
"art.n.prep.art.n.adv.vi.",
"art.adj.n.prep.pron.v.",
"art.adj.n.prep.pron.vi.",
"art.adj.n.prep.pron.adv.v.",
"art.adj.n.prep.pron.adv.vi.",
"art.adj.n.prep.art.n.v.",
"art.adj.n.prep.art.n.vi.",
"art.adj.n.prep.art.n.adv.v.",
"art.adj.n.prep.art.n.adv.vi.",
"pron.v.prep.pron.",
"pron.v.prep.art.n.",
"pron.vi.prep.pron.",
"pron.vi.prep.art.n.",
"pron.adv.v.prep.pron.",
"pron.adv.v.prep.art.n.",
"pron.adv.vi.prep.pron.",
"pron.adv.vi.prep.art.n.",
"art.n.v.prep.pron.",
"art.n.v.prep.art.n.",
"art.n.vi.prep.pron.",
"art.n.vi.prep.art.n.",
"art.n.adv.v.prep.pron.",
"art.n.adv.v.prep.art.n.",
"art.n.adv.vi.prep.pron.",
"art.n.adv.vi.prep.art.n.",
"art.adj.n.v.prep.pron.",
"art.adj.n.v.prep.art.n.",
"art.adj.n.vi.prep.pron.",
"art.adj.n.vi.prep.art.n.",
"art.adj.n.adv.v.prep.pron.",
"art.adj.n.adv.v.prep.art.n.",
"art.adj.n.adv.vi.prep.pron.",
"art.adj.n.adv.vi.prep.art.n.",
"pron.v.pron.",
"pron.v.art.n.",
"pron.v.art.adj.n.",
"pron.vt.pron.",
"pron.vt.art.n.",
"pron.vt.art.adj.n.",
"pron.adv.v.pron.",
"pron.adv.v.art.n.",
"pron.adv.v.art.adj.n.",
"pron.adv.vt.pron.",
"pron.adv.vt.art.n.",
"pron.adv.vt.art.adj.n.",
"art.n.v.pron.",
"art.n.v.art.n.",
"art.n.v.art.adj.n.",
"art.n.vt.pron.",
"art.n.vt.art.n.",
"art.n.vt.art.adj.n.",
"art.n.adv.v.pron.",
"art.n.adv.v.art.n.",
"art.n.adv.v.art.adj.n.",
"art.n.adv.vt.pron.",
"art.n.adv.vt.art.n.",
"art.n.adv.vt.art.adj.n.",
"art.adj.n.v.pron.",
"art.adj.n.v.art.n.",
"art.adj.n.v.art.adj.n.",
"art.adj.n.vt.pron.",
"art.adj.n.vt.art.n.",
"art.adj.n.vt.art.adj.n.",
"art.adj.n.adv.v.pron.",
"art.adj.n.adv.v.art.n.",
"art.adj.n.adv.v.art.adj.n.",
"art.adj.n.adv.vt.pron.",
"art.adj.n.adv.vt.art.n.",
"art.adj.n.adv.vt.art.adj.n.",
"prep.pron.pron.v.pron.",
"prep.pron.pron.v.art.n.",
"prep.pron.pron.v.art.adj.n.",
"prep.pron.pron.vt.pron.",
"prep.pron.pron.vt.art.n.",
"prep.pron.pron.vt.art.adj.n.",
"prep.pron.pron.adv.v.pron.",
"prep.pron.pron.adv.v.art.n.",
"prep.pron.pron.adv.v.art.adj.n.",
"prep.pron.pron.adv.vt.pron.",
"prep.pron.pron.adv.vt.art.n.",
"prep.pron.pron.adv.vt.art.adj.n.",
"prep.pron.art.n.v.pron.",
"prep.pron.art.n.v.art.n.",
"prep.pron.art.n.v.art.adj.n.",
"prep.pron.art.n.vt.pron.",
"prep.pron.art.n.vt.art.n.",
"prep.pron.art.n.vt.art.adj.n.",
"prep.pron.art.n.adv.v.pron.",
"prep.pron.art.n.adv.v.art.n.",
"prep.pron.art.n.adv.v.art.adj.n.",
"prep.pron.art.n.adv.vt.pron.",
"prep.pron.art.n.adv.vt.art.n.",
"prep.pron.art.n.adv.vt.art.adj.n.",
"prep.pron.art.adj.n.v.pron.",
"prep.pron.art.adj.n.v.art.n.",
"prep.pron.art.adj.n.v.art.adj.n.",
"prep.pron.art.adj.n.vt.pron.",
"prep.pron.art.adj.n.vt.art.n.",
"prep.pron.art.adj.n.vt.art.adj.n.",
"prep.pron.art.adj.n.adv.v.pron.",
"prep.pron.art.adj.n.adv.v.art.n.",
"prep.pron.art.adj.n.adv.v.art.adj.n.",
"prep.pron.art.adj.n.adv.vt.pron.",
"prep.pron.art.adj.n.adv.vt.art.n.",
"prep.pron.art.adj.n.adv.vt.art.adj.n.",
"prep.art.n.pron.v.pron.",
"prep.art.n.pron.v.art.n.",
"prep.art.n.pron.v.art.adj.n.",
"prep.art.n.pron.vt.pron.",
"prep.art.n.pron.vt.art.n.",
"prep.art.n.pron.vt.art.adj.n.",
"prep.art.n.pron.adv.v.pron.",
"prep.art.n.pron.adv.v.art.n.",
"prep.art.n.pron.adv.v.art.adj.n.",
"prep.art.n.pron.adv.vt.pron.",
"prep.art.n.pron.adv.vt.art.n.",
"prep.art.n.pron.adv.vt.art.adj.n.",
"prep.art.n.art.n.v.pron.",
"prep.art.n.art.n.v.art.n.",
"prep.art.n.art.n.v.art.adj.n.",
"prep.art.n.art.n.vt.pron.",
"prep.art.n.art.n.vt.art.n.",
"prep.art.n.art.n.vt.art.adj.n.",
"prep.art.n.art.n.adv.v.pron.",
"prep.art.n.art.n.adv.v.art.n.",
"prep.art.n.art.n.adv.v.art.adj.n.",
"prep.art.n.art.n.adv.vt.pron.",
"prep.art.n.art.n.adv.vt.art.n.",
"prep.art.n.art.n.adv.vt.art.adj.n.",
"prep.art.n.art.adj.n.v.pron.",
"prep.art.n.art.adj.n.v.art.n.",
"prep.art.n.art.adj.n.v.art.adj.n.",
"prep.art.n.art.adj.n.vt.pron.",
"prep.art.n.art.adj.n.vt.art.n.",
"prep.art.n.art.adj.n.vt.art.adj.n.",
"prep.art.n.art.adj.n.adv.v.pron.",
"prep.art.n.art.adj.n.adv.v.art.n.",
"prep.art.n.art.adj.n.adv.v.art.adj.n.",
"prep.art.n.art.adj.n.adv.vt.pron.",
"prep.art.n.art.adj.n.adv.vt.art.n.",
"prep.art.n.art.adj.n.adv.vt.art.adj.n.",
"pron.prep.pron.v.pron.",
"pron.prep.pron.v.art.n.",
"pron.prep.pron.v.art.adj.n.",
"pron.prep.pron.vt.pron.",
"pron.prep.pron.vt.art.n.",
"pron.prep.pron.vt.art.adj.n.",
"pron.prep.pron.adv.v.pron.",
"pron.prep.pron.adv.v.art.n.",
"pron.prep.pron.adv.v.art.adj.n.",
"pron.prep.pron.adv.vt.pron.",
"pron.prep.pron.adv.vt.art.n.",
"pron.prep.pron.adv.vt.art.adj.n.",
"pron.prep.art.n.v.pron.",
"pron.prep.art.n.v.art.n.",
"pron.prep.art.n.v.art.adj.n.",
"pron.prep.art.n.vt.pron.",
"pron.prep.art.n.vt.art.n.",
"pron.prep.art.n.vt.art.adj.n.",
"pron.prep.art.n.adv.v.pron.",
"pron.prep.art.n.adv.v.art.n.",
"pron.prep.art.n.adv.v.art.adj.n.",
"pron.prep.art.n.adv.vt.pron.",
"pron.prep.art.n.adv.vt.art.n.",
"pron.prep.art.n.adv.vt.art.adj.n.",
"art.n.prep.pron.v.pron.",
"art.n.prep.pron.v.art.n.",
"art.n.prep.pron.v.art.adj.n.",
"art.n.prep.pron.vt.pron.",
"art.n.prep.pron.vt.art.n.",
"art.n.prep.pron.vt.art.adj.n.",
"art.n.prep.pron.adv.v.pron.",
"art.n.prep.pron.adv.v.art.n.",
"art.n.prep.pron.adv.v.art.adj.n.",
"art.n.prep.pron.adv.vt.pron.",
"art.n.prep.pron.adv.vt.art.n.",
"art.n.prep.pron.adv.vt.art.adj.n.",
"art.n.prep.art.n.v.pron.",
"art.n.prep.art.n.v.art.n.",
"art.n.prep.art.n.v.art.adj.n.",
"art.n.prep.art.n.vt.pron.",
"art.n.prep.art.n.vt.art.n.",
"art.n.prep.art.n.vt.art.adj.n.",
"art.n.prep.art.n.adv.v.pron.",
"art.n.prep.art.n.adv.v.art.n.",
"art.n.prep.art.n.adv.v.art.adj.n.",
"art.n.prep.art.n.adv.vt.pron.",
"art.n.prep.art.n.adv.vt.art.n.",
"art.n.prep.art.n.adv.vt.art.adj.n.",
"art.adj.n.prep.pron.v.pron.",
"art.adj.n.prep.pron.v.art.n.",
"art.adj.n.prep.pron.v.art.adj.n.",
"art.adj.n.prep.pron.vt.pron.",
"art.adj.n.prep.pron.vt.art.n.",
"art.adj.n.prep.pron.vt.art.adj.n.",
"art.adj.n.prep.pron.adv.v.pron.",
"art.adj.n.prep.pron.adv.v.art.n.",
"art.adj.n.prep.pron.adv.v.art.adj.n.",
"art.adj.n.prep.pron.adv.vt.pron.",
"art.adj.n.prep.pron.adv.vt.art.n.",
"art.adj.n.prep.pron.adv.vt.art.adj.n.",
"art.adj.n.prep.art.n.v.pron.",
"art.adj.n.prep.art.n.v.art.n.",
"art.adj.n.prep.art.n.v.art.adj.n.",
"art.adj.n.prep.art.n.vt.pron.",
"art.adj.n.prep.art.n.vt.art.n.",
"art.adj.n.prep.art.n.vt.art.adj.n.",
"art.adj.n.prep.art.n.adv.v.pron.",
"art.adj.n.prep.art.n.adv.v.art.n.",
"art.adj.n.prep.art.n.adv.v.art.adj.n.",
"art.adj.n.prep.art.n.adv.vt.pron.",
"art.adj.n.prep.art.n.adv.vt.art.n.",
"art.adj.n.prep.art.n.adv.vt.art.adj.n.",
"pron.v.prep.pron.pron.",
"pron.v.prep.pron.art.n.",
"pron.v.prep.pron.art.adj.n.",
"pron.v.prep.art.n.pron.",
"pron.v.prep.art.n.art.n.",
"pron.v.prep.art.n.art.adj.n.",
"pron.vt.prep.pron.pron.",
"pron.vt.prep.pron.art.n.",
"pron.vt.prep.pron.art.adj.n.",
"pron.vt.prep.art.n.pron.",
"pron.vt.prep.art.n.art.n.",
"pron.vt.prep.art.n.art.adj.n.",
"pron.adv.v.prep.pron.pron.",
"pron.adv.v.prep.pron.art.n.",
"pron.adv.v.prep.pron.art.adj.n.",
"pron.adv.v.prep.art.n.pron.",
"pron.adv.v.prep.art.n.art.n.",
"pron.adv.v.prep.art.n.art.adj.n.",
"pron.adv.vt.prep.pron.pron.",
"pron.adv.vt.prep.pron.art.n.",
"pron.adv.vt.prep.pron.art.adj.n.",
"pron.adv.vt.prep.art.n.pron.",
"pron.adv.vt.prep.art.n.art.n.",
"pron.adv.vt.prep.art.n.art.adj.n.",
"art.n.v.prep.pron.pron.",
"art.n.v.prep.pron.art.n.",
"art.n.v.prep.pron.art.adj.n.",
"art.n.v.prep.art.n.pron.",
"art.n.v.prep.art.n.art.n.",
"art.n.v.prep.art.n.art.adj.n.",
"art.n.vt.prep.pron.pron.",
"art.n.vt.prep.pron.art.n.",
"art.n.vt.prep.pron.art.adj.n.",
"art.n.vt.prep.art.n.pron.",
"art.n.vt.prep.art.n.art.n.",
"art.n.vt.prep.art.n.art.adj.n.",
"art.n.adv.v.prep.pron.pron.",
"art.n.adv.v.prep.pron.art.n.",
"art.n.adv.v.prep.pron.art.adj.n.",
"art.n.adv.v.prep.art.n.pron.",
"art.n.adv.v.prep.art.n.art.n.",
"art.n.adv.v.prep.art.n.art.adj.n.",
"art.n.adv.vt.prep.pron.pron.",
"art.n.adv.vt.prep.pron.art.n.",
"art.n.adv.vt.prep.pron.art.adj.n.",
"art.n.adv.vt.prep.art.n.pron.",
"art.n.adv.vt.prep.art.n.art.n.",
"art.n.adv.vt.prep.art.n.art.adj.n.",
"art.adj.n.v.prep.pron.pron.",
"art.adj.n.v.prep.pron.art.n.",
"art.adj.n.v.prep.pron.art.adj.n.",
"art.adj.n.v.prep.art.n.pron.",
"art.adj.n.v.prep.art.n.art.n.",
"art.adj.n.v.prep.art.n.art.adj.n.",
"art.adj.n.vt.prep.pron.pron.",
"art.adj.n.vt.prep.pron.art.n.",
"art.adj.n.vt.prep.pron.art.adj.n.",
"art.adj.n.vt.prep.art.n.pron.",
"art.adj.n.vt.prep.art.n.art.n.",
"art.adj.n.vt.prep.art.n.art.adj.n.",
"art.adj.n.adv.v.prep.pron.pron.",
"art.adj.n.adv.v.prep.pron.art.n.",
"art.adj.n.adv.v.prep.pron.art.adj.n.",
"art.adj.n.adv.v.prep.art.n.pron.",
"art.adj.n.adv.v.prep.art.n.art.n.",
"art.adj.n.adv.v.prep.art.n.art.adj.n.",
"art.adj.n.adv.vt.prep.pron.pron.",
"art.adj.n.adv.vt.prep.pron.art.n.",
"art.adj.n.adv.vt.prep.pron.art.adj.n.",
"art.adj.n.adv.vt.prep.art.n.pron.",
"art.adj.n.adv.vt.prep.art.n.art.n.",
"art.adj.n.adv.vt.prep.art.n.art.adj.n.",
"pron.v.pron.prep.pron.",
"pron.v.pron.prep.art.n.",
"pron.v.art.n.prep.pron.",
"pron.v.art.n.prep.art.n.",
"pron.v.art.adj.n.prep.pron.",
"pron.v.art.adj.n.prep.art.n.",
"pron.vt.pron.prep.pron.",
"pron.vt.pron.prep.art.n.",
"pron.vt.art.n.prep.pron.",
"pron.vt.art.n.prep.art.n.",
"pron.vt.art.adj.n.prep.pron.",
"pron.vt.art.adj.n.prep.art.n.",
"pron.adv.v.pron.prep.pron.",
"pron.adv.v.pron.prep.art.n.",
"pron.adv.v.art.n.prep.pron.",
"pron.adv.v.art.n.prep.art.n.",
"pron.adv.v.art.adj.n.prep.pron.",
"pron.adv.v.art.adj.n.prep.art.n.",
"pron.adv.vt.pron.prep.pron.",
"pron.adv.vt.pron.prep.art.n.",
"pron.adv.vt.art.n.prep.pron.",
"pron.adv.vt.art.n.prep.art.n.",
"pron.adv.vt.art.adj.n.prep.pron.",
"pron.adv.vt.art.adj.n.prep.art.n.",
"art.n.v.pron.prep.pron.",
"art.n.v.pron.prep.art.n.",
"art.n.v.art.n.prep.pron.",
"art.n.v.art.n.prep.art.n.",
"art.n.v.art.adj.n.prep.pron.",
"art.n.v.art.adj.n.prep.art.n.",
"art.n.vt.pron.prep.pron.",
"art.n.vt.pron.prep.art.n.",
"art.n.vt.art.n.prep.pron.",
"art.n.vt.art.n.prep.art.n.",
"art.n.vt.art.adj.n.prep.pron.",
"art.n.vt.art.adj.n.prep.art.n.",
"art.n.adv.v.pron.prep.pron.",
"art.n.adv.v.pron.prep.art.n.",
"art.n.adv.v.art.n.prep.pron.",
"art.n.adv.v.art.n.prep.art.n.",
"art.n.adv.v.art.adj.n.prep.pron.",
"art.n.adv.v.art.adj.n.prep.art.n.",
"art.n.adv.vt.pron.prep.pron.",
"art.n.adv.vt.pron.prep.art.n.",
"art.n.adv.vt.art.n.prep.pron.",
"art.n.adv.vt.art.n.prep.art.n.",
"art.n.adv.vt.art.adj.n.prep.pron.",
"art.n.adv.vt.art.adj.n.prep.art.n.",
"art.adj.n.v.pron.prep.pron.",
"art.adj.n.v.pron.prep.art.n.",
"art.adj.n.v.art.n.prep.pron.",
"art.adj.n.v.art.n.prep.art.n.",
"art.adj.n.v.art.adj.n.prep.pron.",
"art.adj.n.v.art.adj.n.prep.art.n.",
"art.adj.n.vt.pron.prep.pron.",
"art.adj.n.vt.pron.prep.art.n.",
"art.adj.n.vt.art.n.prep.pron.",
"art.adj.n.vt.art.n.prep.art.n.",
"art.adj.n.vt.art.adj.n.prep.pron.",
"art.adj.n.vt.art.adj.n.prep.art.n.",
"art.adj.n.adv.v.pron.prep.pron.",
"art.adj.n.adv.v.pron.prep.art.n.",
"art.adj.n.adv.v.art.n.prep.pron.",
"art.adj.n.adv.v.art.n.prep.art.n.",
"art.adj.n.adv.v.art.adj.n.prep.pron.",
"art.adj.n.adv.v.art.adj.n.prep.art.n.",
"art.adj.n.adv.vt.pron.prep.pron.",
"art.adj.n.adv.vt.pron.prep.art.n.",
"art.adj.n.adv.vt.art.n.prep.pron.",
"art.adj.n.adv.vt.art.n.prep.art.n.",
"art.adj.n.adv.vt.art.adj.n.prep.pron.",
"art.adj.n.adv.vt.art.adj.n.prep.art.n.",
};
/*
<sentence>::= <S><I> | <S><T><O> | <P><S><I> | <S><P><I> | <S><I><P> |
<P><S><T><O> | <S><P><T><O> | <S><T><P><O> | <S><T><O><P>
<S>::= pron. | art.n. | art.adj.n.
<I>::= v. | adv.v. | vi. | adv.vi.
<T>::= v. | adv.v. | vt. | adv.vt.
<O>::= pron. | art.n. | art.adj.n.
<P>::= prep.pron. | prep.art.n. | (prep.art.adj.n.) //这个不合法 但是数据里没有
*/
int n, m;
char a[1005], b[1005];
void normalize(char *s) {
for(int i = 0; s[i]; ++i)
if(isalpha(s[i])) s[i] = tolower(s[i]);
}
set<string> ok;
map<string, string> mp;
int main() {
#ifdef LOCAL
freopen("C:\\Users\\TaoSama\\Desktop\\in.txt", "r", stdin);
// freopen("C:\\Users\\TaoSama\\Desktop\\out.txt","w",stdout);
#endif
ios_base::sync_with_stdio(0);
for(int i = 0; i < 408; ++i) ok.insert(sentences[i]);
while(scanf("%d%d", &n, &m) == 2) {
mp.clear();
for(int i = 1; i <= n; ++i) {
scanf("%s%s", a, b);
normalize(a); normalize(b);
mp[string(a)] = string(b);
}
getchar();
for(int i = 1; i <= m; ++i) {
gets(a);
string cur;
int c = 0; char buf[1005];
for(int j = 0; a[j]; ++j) {
if(isalpha(a[j])) {
a[j] = tolower(a[j]);
buf[c++] = a[j];
} else {
buf[c] = 0;
cur += mp[string(buf)];
c = 0;
}
}
if(c) {buf[c] = 0; cur += mp[string(buf)];}
puts(ok.count(cur) ? "YES" : "NO");
}
}
return 0;
}
/*
At the happy airport,He see a happy baby.
At the airport,He see a happy baby see.
he see see a baby.
a baby at the airport see he.
a baby see at the airport he
NO
NO
NO
YES
YES
YES
*/