PTA Look-and-say Sequence (20分)

It is the human mind that releases infinite light, and it is also the human mind that creates boundless darkness. Light and darkness are intertwined and fight together. This is the world for which we are nostalgic and helpless.

Look-and-say sequence is a sequence of integers as the following:

D, D1, D111, D113, D11231, D112213111, ...

where D is in [0, 9] except 1. The (n+1)st number is a kind of description of the nth number. For example, the 2nd number means that there is one D in the 1st number, and hence it is D1; the 2nd number consists of one D (corresponding to D1) and one 1 (corresponding to 11), therefore the 3rd number is D111; or since the 4th number is D113, it consists of one D, two 1's, and one 3, so the next number must be D11231. This definition works for D = 1 as well. Now you are supposed to calculate the Nth number in a look-and-say sequence of a given digit D.

Input Specification:

Each input file contains one test case, which gives D (in [0, 9]) and a positive integer N (≤ 40), separated by a space.

Output Specification:

Print in a line the Nth number in a look-and-say sequence of D.

Sample Input:

1 8

Sample Output:

1123123111
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <ctime>
#include <cctype>
#include <bitset>
#include <utility>
#include <sstream>
#include <complex>
#include <iomanip>
#include<climits>//INT_MAX

//#include<bits/stdc++.h>
#define PP pair<ll,int>
#define inf 0x3f3f3f3f
#define llinf 0x3f3f3f3f3f3f3f3fll
#define dinf 1000000000000.0
#define PI 3.1415926
typedef long long ll;
using namespace std;
int const mod=1e9+7;
const int maxn=1e5+10;
int d, n;
int main() {
    scanf("%d %d", &d, &n);
    vector<int> V;
    V.push_back(d);
    for (int i=1; i<n; i++) {
        vector<int> ls;
        int v=V[0];
        int ct=0;
        for (int j=0; j<V.size(); j++) {
            if (V[j]==v)
                    ct++;
            else{
                ls.push_back(v);
                ls.push_back(ct);
                ct=1;
                v=V[j];
            }
            if (j==V.size()-1) {
                ls.push_back(v);
                ls.push_back(ct);
            }
        }
        V=ls;
    }
    for (int i=0; i<V.size(); i++)
        printf("%d", V[i]);
    return 0;
}

 

Guess you like

Origin blog.csdn.net/weixin_44170305/article/details/108465930