题意:
给一个只有循环的程序,询问该程序的时间复杂度,每个循环都是形如 F i a b,其中i表示循环变量,a,b表示从a循环到b,其中a,b的取值有可以是常数或n,n是一个巨大的变量。然后每个循环开始的F会对应一个E结束。你要判断程序是否合法(即循环是否匹配,是否有重复的循环变量),如果程序合法则输出时间复杂度。
题解:
表达式处理裸题,递归处理每层循环即可,开始的时候用栈将循环匹配一遍。
代码:
#include <iostream>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <ctime>
#include <queue>
#include <vector>
#include <map>
#include <stack>
using namespace std;
int l,n,cnt;
int match[10005];
string tim,s,ss;
bool mark[26];
stack<int> S;
bool checkERR()
{
for (int i = 0;i < s.size();i++)
{
if (s[i] == 'F')
{
if (mark[s[i + 2] - 'a'])
return true;
mark[s[i + 2] - 'a'] = true;
S.push(i);
}
if (s[i]