设为首页 加入收藏

TOP

uva 586 Instant Complexity
2014-11-23 21:38:22 来源: 作者: 【 】 浏览:1
Tags:uva 586 Instant Complexity

思路:递归模拟

分析:
1 题目是一道给定一段程序代码的球时间复杂度
2 根据题目的意思,我们可以利用栈和递归的方法,但是栈的方法比较不好写,所以我们利用递归的思路来写
3 当我们遇到LOOP的时候,我们就递归下去,当遇到OP的时候我们就去计算当前这一层的复杂度,遇到END的时间retuen即可
4 注意最后的输出


代码:

#include
#include
#include
#include
#include
using namespace std;

const int MAXN = 15;

int ans[MAXN];
char str[MAXN];

void getAns(vectorv , int x){
    int size = v.size();
    int num_n = 0;
    int num_xishu = x;
    for(int i = 0 ; i < size ; i++){
        int len = v[i].size();
        if(v[i][0] == 'n')
            num_n++;
        else{
            int sum = 0;
            for(int j = 0 ; j < len ; j++) 
                sum = sum*10 + v[i][j]-'0';
            num_xishu *= sum;
        }
    }
    ans[num_n] += num_xishu;
}

void solve(vectorv){
    int x;
    while(1){
        scanf("%s" , str);
        if(str[0] == 'L'){
            scanf("%s" , str); 
            v.push_back(str); 
            solve(v);
            v.pop_back();
        }
        else if(str[0] == 'O'){
            scanf("%d" , &x); 
            getAns(v , x);
        }
        else if(str[0] == 'E'){
            return;
        }
    }
}

void output(){
    printf("Runtime = ");
    bool isFirst = true;
    bool isTime = false;
    for(int i = MAXN-1 ; i >= 1 ; i--){
        if(ans[i]){
            isTime = true; 
            if(isFirst)
                isFirst = false;
            else
                printf("+");
            if(ans[i] > 1)
                printf("%d*" , ans[i]); 
            printf("n");
            if(i > 1)
                printf("^%d" , i);
        }
    }
    if(ans[0]){
        isTime = true; 
        if(!isFirst)
            printf("+");
        printf("%d" , ans[0]);
    }
    if(!isTime)
        printf("0");
    printf("\n\n");
}

int main(){
    int Case , cas = 1;
    vectorv;
    scanf("%d" , &Case);
    while(Case--){
        scanf("%s" , str); 
        memset(ans , 0 , sizeof(ans));
        printf("Program #%d\n" , cas++);
        v.clear();
        solve(v);
        output();
    } 
    return 0;
}

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇poj1556 下一篇Char* ,CString ,WCHAR*之间的转..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Redis on AWS:Elast (2025-12-27 04:19:30)
·在 Spring Boot 项目 (2025-12-27 04:19:27)
·使用华为开发者空间 (2025-12-27 04:19:24)
·Getting Started wit (2025-12-27 03:49:24)
·Ubuntu 上最好用的中 (2025-12-27 03:49:20)