• PAT 1084 外观数列


    https://pintia.cn/problem-sets/994805260223102976/problems/994805260583813120

    外观数列是指具有以下特点的整数序列:

    d, d1, d111, d113, d11231, d112213111, ...
    

    它从不等于 1 的数字 d 开始,序列的第 n+1 项是对第 n 项的描述。比如第 2 项表示第 1 项有 1 个 d,所以就是 d1;第 2 项是 1 个 d(对应 d1)和 1 个 1(对应 11),所以第 3 项就是 d111。又比如第 4 项是 d113,其描述就是 1 个 d,2 个 1,1 个 3,所以下一项就是 d11231。当然这个定义对 d = 1 也成立。本题要求你推算任意给定数字 d 的外观数列的第 N 项。

    输入格式:

    输入第一行给出 [0,9] 范围内的一个整数 d、以及一个正整数 N(≤ 40),用空格分隔。

    输出格式:

    在一行中给出数字 d 的外观数列的第 N 项。

    输入样例:

    1 8
    

    输出样例:

    1123123111

    代码:

    #include <cstdio>
    #include <string>
    #include <stack>
    #include <cstring>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    const int maxn = 1e5 + 10;
    int n, d;
    int sz, val[maxn], cnt[maxn];
    
    int len[maxn];
    char ans[50][maxn];
    
    void work(int idx) {
    	sz = 0;
    	int num = 1;
    	for (int i = 1; i < len[idx]; i++) {
    		if (ans[idx][i] == ans[idx][i - 1]) {
    			num++;
    		} else {
    			val[sz] = ans[idx][i - 1] - '0';
    			cnt[sz] = num;
    			sz++;
    			num = 1;
    		}
    	}
    
    	val[sz] = ans[idx][len[idx] - 1] - '0';
    	cnt[sz] = num;
    	sz++;
    
    	for (int i = 0; i < sz; i++) {
    		ans[idx + 1][len[idx + 1] ++] = (char)(val[i] + '0');
    		stack<int> st;
    		while (cnt[i]) {
    			st.push(cnt[i] % 10);
    			cnt[i] = cnt[i] / 10;
    		}
    		while (!st.empty()) {
    			ans[idx + 1][len[idx + 1] ++] = (char)(st.top() + '0');
    			st.pop();
    		}
    	}
    }
    
    int main() {
    	scanf("%d%d", &n, &d);
    	len[1] = 1;
    	ans[1][0] = (char)(n + '0');
    	for (int i = 1; i < d; i++) {
    		work(i);
    	}
    	cout << ans[d] << endl;
    	return 0;
    }
    

      

  • 相关阅读:
    linux内核——进程切换宏switch_to
    android源码目录结构详解
    SRM 390(1-250pt)
    SRM 391(1-250pt)
    CodeForces 221(div 2)
    SRM 407(1-250pt, 1-500pt)
    SRM 392(1-250pt)
    SRM 393(1-250pt)
    CodeForces 220(div 2)
    SRM 406(1-250pt, 1-500pt)
  • 原文地址:https://www.cnblogs.com/zlrrrr/p/10067847.html
Copyright © 2020-2023  润新知