1. 程式人生 > >【ICM Technex 2018 and Codeforces Round #463 (Div. 1 + Div. 2, combined) B】Recursive Queries

【ICM Technex 2018 and Codeforces Round #463 (Div. 1 + Div. 2, combined) B】Recursive Queries

題解 fine com ces ble dfs con round cal

【鏈接】 我是鏈接,點我呀:)
【題意】


在這裏輸入題意

【題解】


寫個記憶化搜索。
接近O(n)的復雜度吧

【代碼】

#include <bits/stdc++.h>
using namespace std;

const int N = 1e6;

int g[N+10];
int pre[N+10][20];

int f(int x){
    int temp = 1;
    while (x){
        if (x%10!=0)
            temp*=(x%10);
        x/=10;
    }
    return temp;
}

int
dfs(int x){ if (g[x]!=0) return g[x]; if (x<10){ return g[x] = x; }else{ return g[x] = dfs(f(x)); } } int main(){ #ifdef LOCAL_DEFINE freopen("rush_in.txt", "r", stdin); #endif ios::sync_with_stdio(0),cin.tie(0); for (int
i = 1;i <= N;i++) if (g[i]==0) dfs(i); for (int i = 1;i <= N;i++){ for (int j = 1;j <= 9;j++) pre[i][j] = pre[i-1][j]; if (g[i]<=9) pre[i][g[i]]++; } int q; cin >> q; while (q--){ int l,r,x; cin >> l >> r >> x; cout<<pre[r][x]-pre[l-1
][x]<<endl; } return 0; }

【ICM Technex 2018 and Codeforces Round #463 (Div. 1 + Div. 2, combined) B】Recursive Queries