• 洛谷P3952 时间复杂度


    题目
    先判断是否有解,然后开两个栈,分别存进入递归时间复杂度为O(1)的变量,和时间复杂度为O(n)的变量,最后取最大值。

    #include <bits/stdc++.h>
    using namespace std;
    int T;
    int tong[1000100];
    stack <int> s, s2;
    int main()
    {
    //	freopen("Time.txt", "w", stdout);
    	scanf("%d", &T);
    	while (T--)
    	{
    		memset(tong, 0, sizeof(tong)); 
    		while (s.size()) s.pop();
    		int L, flag = 0, F1 = 0, E1 = 0, ans = 0, now = 0; string TI;//flag为2则不进入 
    		cin >> L >> TI;	 int len = TI.size();
    		if (TI[2] == '1')
    		 	ans = 0;
    		else 
    			for (int i = 4; i < len; i++)
    			{
    				if (TI[i] >= '0' && TI[i] <= '9')
    					ans = ans * 10 + TI[i] - '0';
    			}
    		for (int i = 1; i <= L; i++)
    		{		
    			char c1;
    			cin >> c1;
    			if (c1 == 'F')
    			{	
    				F1++; 
    				string st, ed; char bianliang;
    				cin >> bianliang >> st >> ed;
    				if (tong[bianliang - '0'])//如果已经进入了该变量,就判断ERR 
    					flag = 1;//以后的都不计入时间复杂度 (
    				if (st[0] == 'n' && ed[0] != 'n' && flag != 1)
    				{
    					/*if (ed[0] == 'n')
    						now += 0;
    					else if (!flag)
    						now++;*/
    					flag = 2;
    					tong[bianliang - '0'] = 0;
    				}	
    				else if (st[0] != 'n') //说明此时st是数 
    				{
    					int sta = 0, eda = 0;
    					for (int i = 0; i < st.size(); i++)
    						if (st[i] <= '9' && st[i] >= '0')
    							sta = sta * 10 + st[i] - '0';
    					if (ed[0] == 'n' && !flag)
    					{
    						tong[bianliang - '0'] = 1;
    						s.push(bianliang - '0');	
    						int SI = s.size();
    						now = max(now, SI);
    					}
    					else
    					{
    						for (int i = 0; i < ed.size(); i++)
    							if (ed[i] <= '9' && ed[i] >= '0')
    								eda = eda * 10 + ed[i] - '0';
    						if (sta > eda && flag != 1) flag = 2, s.push(214748);
    						if (sta <= eda) tong[bianliang - '0'] = 1, s2.push(bianliang - '0');// s2表示进去但不加时间复杂度的 
    					}
    				}
    		 	}
    		 	else
    		 	{
    			 	E1++; int ha = 0; 
    			 	if (s.size() )
    					ha = s.top(), s.pop();
    				else if (!s.size() && s2.size() ) 
    					ha = s2.top(), s2.pop();
    				tong[ha] = 0;
    				if (ha == 214748 && flag != 1)
    					flag = 0;
    			 		
    		 	}
    	 	}
    	 	if (F1 != E1 || flag == 1)
    	 		printf("ERR
    ");
    	 	else 
    		 {
    		 	if (ans != now)
    		 		printf("No
    ", ans, now);
    		 	else 
    		 	printf("Yes
    ");	
    		 }
     	}
    	return 0;
    }
    
    
  • 相关阅读:
    数据库学习摘记 —— 关系代数和关系演算
    数据库学习摘记 —— 数据库基本概念杂记
    POJ 3130 How I Mathematician Wonder What You Are! (半平面相交)
    POJ 3311 Hie with the Pie (状压dp)
    hdu 1533 Going Home (最小费用最大流)
    bzoj 2115 Xor (线性基)
    hdu 5120 Intersection (圆环面积相交->圆面积相交)
    BZOJ 2460 元素(线性基)
    POJ 3348 Cows (凸包模板+凸包面积)
    UVA 12012 Detection of Extraterrestrial(KMP求循环节)
  • 原文地址:https://www.cnblogs.com/liuwenyao/p/11635016.html
Copyright © 2020-2023  润新知