rt,帮我查出来的赏关注
#include <bits/stdc++.h>
using namespace std;
struct Bigint {
int len, f[50];
Bigint(int x = 0) {
memset(f, 0, sizeof(f));
for(len = 1; x; len++)
f[len] = x % 10, x /= 10;
len--;
}
void flatten(int x) {
len = x;
for(int i = len; i >= 1; i--) {
f[i + 1] += f[i] / 10;
f[i] %= 10;
}
while(!f[len]) len--;
}
void print() {
for(int i = max(len, 1); i >= 1; i--)
cout << f[i];
}
};
Bigint operator*(Bigint a, int b) {
Bigint c;
int mlen = a.len;
for(int i = 1; i <= mlen; i++)
c.f[i] = a.f[i] * b;
c.flatten(mlen + 11);
return c;
}
bool vis[20];
string s; int k, cnt = 0;
int a[20], b[20];
int mp[20];
vector<int> G[20];
Bigint ans(1);
inline void dfs(int x) {
if(vis[x]) return ;
cnt++;
vis[x] = 1;
for(int i = 0; i < G[x].size(); i++)
dfs(G[x][i]);
vis[x] = 0;
}
int main() {
cin >> s >> k;
for(int i = 1; i <= k; i++)
cin >> a[i] >> b[i], G[a[i]].push_back(b[i]);
for(int i = 0; i < s.size(); i++) {
memset(vis, 0, sizeof(vis));
cnt = 0;
dfs(s[i] - '0');
// cout << cnt << endl;
if(cnt == 0) cnt = 1;
ans = ans * cnt;
}
ans.print();
return 0;
}