q1

第七次作业 正规式到正规文法与自动机

空扰寡人 提交于 2019-12-02 06:33:04
1.正规式转换到正规文法 对任意正规式R选择一个非终结符Z生成规则Z→R 1.对形如A→ab的规则,转换成A→aB,B→b 2.将形如A→a|b的规则,转换成A→a,A→b(A→a|b) 3.将形如A→a*b的规则,转换成A→aA,A→b 将形如A→ba*的规则,转换成A→Aa,A→b 不断利用上述规则进行转换,直到每条规则最多含有一个终结符为止. ①1(0|1)*101 S→A1 A→B0 B→C1 C→1(0|1)* →1|C0|C1 ②(a|b)*(aa|bb)(a|b)* S→(a|b)S S→(aa|bb)(a|b)* S→S(a|b) S→aa|bb S→aS|bS|Sa|Sb|aA|bB A→a B→b ③((0|1)*|(11))* S→ε|((0|1)*|(11))S S→ε|(0|1)*S|11S S→(0|1)*S S→(0|1)S|S S→11S S→1A A→1A S →ε|0S|1S|1A A→1S ④(0|11* 0)* S→ε|(0|11*0)S S→ε|0S|(11*0)S  S→0S  S→(11*0)S  S→11*0S  S→1A ,A→1*0S  A→1A ,A→0S S→ε|0S|1A A→1A|0S 2. 自动机M=({q0,q1,q2,q3},{0,1},f,q0,{q3}) 其中f: (q0,0)=q1 (q1,0)=q2 (q2

文法

大城市里の小女人 提交于 2019-12-02 04:02:26
1. 正规式转换到正规文法 对任意正规式R选择一个非终结符Z生成规则Z→R 1.对形如A→ab的规则,转换成A→aB,B→b 2.将形如A→a|b的规则,转换成A→a,A→b(A→a|b) 3.将形如A→a*b的规则,转换成A→aA,A→b 将形如A→ba*的规则,转换成A→Aa,A→b 不断利用上述规则进行转换,直到每条规则最多含有一个终结符为止. 1(0|1)*101 S->A1 A->B0 B->C1 C->1(0|1)* ->1|C0|C1 (a|b)*(aa|bb)(a|b)* S->(a|b)S S->(aa|bb)(a|b)* S->S(a|b) S->(aa|bb) S->aA A->a S->bB B->b S->aS|bS|Sa|Sb|aA|bB ((0|1)*|(11))* S->((0|1)*|(11))S|E S->(0|1)*S|11S|E S->(0|1)*S S->(0|1)S S->0S|1S S->1A A->1S S->0S|1S|1A|E (0|11 0) S->0 S->1A A->1B B->0 S->0|1A 2. 自动机 M=({q0,q1,q2,q3},{0,1},f,q0,{q3}) 其中f: (q0,0)=q1 (q1,0)=q2 (q2,0)=q3 (q0,1)=q0 (q1,1)=q0 (q2,1)=q0 (q3,0)=q3

数列极差

别说谁变了你拦得住时间么 提交于 2019-11-30 16:32:38
https://loj.ac/problem/10005 题目描述    有n个数,每次操作选择两个数,删去,并往数列中加入a×b+1,求出剩下一个数时其最大值和最小值的差 思路   显然,我们只需分别求出最大值和最小值即可。那么我们只需要思考如何操作会得到最值。我们只考虑最大值,假设数列中有三个数a,b,c,并且a < b < c,那么如果先合并a,b,再合并c, 代价为(a*b + 1)*c + 1 = a*b*c + c + 1;同理,先合并b,c,再合并a,代价为(b*c + 1)*a + 1 = a*b*c + a +1;先合并a,c,再合并b,代价为a*b*c + b + 1 。比较可知,先合并a,b时结果最大,而c可以代表序列中任何比a、b大的数,所以先合并a、b。最小值也是类似。因此只要经过两次排序,分别处理出最大值和最小值即可。不过我当时用的是优先队列…… 代码 #include <bits/stdc++.h> using namespace std; priority_queue<int> q1; priority_queue<int,vector<int>,greater<int> >q2; int main() { int n,x; scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&x); q1.push