ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

洛谷P3952 时间复杂度

2019-10-08 13:50:40  阅读:263  来源: 互联网

标签:洛谷 tong int ed 复杂度 st flag TI 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\n");
        else 
         {
            if (ans != now)
                printf("No\n", ans, now);
            else 
            printf("Yes\n");    
         }
    }
    return 0;
}

标签:洛谷,tong,int,ed,复杂度,st,flag,TI,P3952
来源: https://www.cnblogs.com/liuwenyao/p/11635016.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有