#3AC其余全WA下载测试点后自测无误码风优良求dalao指点
查看原帖
#3AC其余全WA下载测试点后自测无误码风优良求dalao指点
1284582
F_L_Bird楼主2024/8/14 17:29

代码如下:

#include<iostream>
#include<string>
using namespace std;

string turning_rule[15];
int num_of_turning[10] = {};
bool vis[10] = {};
int k;

struct HPN {
	int num[40] = {1,1};
} ans;

void dfs(int n) {
	vis[n] = true;
	for(int i = 0; i < k; i += 1) {
		if(turning_rule[i][0] - '0' == n && !vis[turning_rule[i][2] - '0']) {
			dfs(turning_rule[i][2] - '0');
		}
	}
	return;
}

struct HPN multiply(struct HPN a,int n) {
	int x = 0;
	for(int i = 1; i <= a.num[0]; i += 1) {
		a.num[i] *= n;
		a.num[i] += x;
		x = a.num[i] / 10;
		a.num[i] %= 10;
	}
	a.num[0] += (x == 0 ? 0 : 1);
	a.num[a.num[0]] += x;
	return a;
}

int main() {
	string n;
	cin>>n>>k;
	cin.ignore();
	for(int i = 0; i < k; i += 1) {
		getline(cin,turning_rule[i]);
	}
	for(int i = 0; i <= 9; i += 1) {	//对每个数字可能转变的个数进行遍历
		for(int j = 0; j <= 9; j += 1) {	//初始化数组
			vis[j] = false;
		}
		dfs(i);
		for(int j = 0; j <= 9; j += 1) {	//统计数字个数
			if(vis[j]) {
				num_of_turning[i] += 1;
			}
		}
	}
	for(int i = 0; i < n.length(); i += 1) {
		ans = multiply(ans,num_of_turning[n[i] - '0']);
	}
	for(int i = ans.num[0]; i >= 1; i -= 1) {
		cout<<ans.num[i];
	}
	cout<<endl;
	return 0;
}

#1WA提示扫描到4实际应读入9,自行下载测试点后在Devc++ embarcadero 6.3和洛谷IDE使用C++14(GCC9)o2优化开关都尝试发现输出无误

求dalao指点QAQ

2024/8/14 17:29
加载中...