60分,后两个测试点 WA 了,不知道为什么,紧急求助!
查看原帖
60分,后两个测试点 WA 了,不知道为什么,紧急求助!
494699
卷王慢即快楼主2023/5/27 11:10

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;
}
2023/5/27 11:10
加载中...