请留下你的%%%
查看原帖
请留下你的%%%
1431527
封禁用户楼主2024/11/12 19:25

求超过

#include <iostream>
#include <vector>
#include <unordered_map>
#include <algorithm>
#include <cmath>
#include <stack>
using namespace std;

unordered_map<int, int> memo1;
unordered_map<int, int> memo2;
unordered_map<int, int> memo3;

int get_fibonacci(int n) {
	if (n <= 1) return n;
	if (memo1.find(n) != memo1.end()) return memo1[n];
	memo1[n] = get_fibonacci(n - 1) + get_fibonacci(n - 2);
	return memo1[n];
}

int get_factorial(int n) {
	if (n <= 1) return 1;
	if (memo2.find(n) != memo2.end()) return memo2[n];
	memo2[n] = n * get_factorial(n - 1);
	return memo2[n];
}

int get_exponentiation(int base, int exp) {
	if (exp == 0) return 1;
	if (memo3.find(base * 100 + exp) != memo3.end()) return memo3[base * 100 + exp];
	memo3[base * 100 + exp] = base * get_exponentiation(base, exp - 1);
	return memo3[base * 100 + exp];
}

int complex_calculation(int x, int y) {
	int fib = get_fibonacci(x);
	int fact = get_factorial(y);
	return fib * fact + get_exponentiation(fib, y) - (x + y);
}

vector<vector<int>> dp;

void initialize_dp(int n) {
	dp.resize(n + 1, vector<int>(n + 1, 0));
}

void perform_dp_calculation(const string &s) {
	int n = s.size();
	initialize_dp(n);
	
	for (int i = 0; i <= n; ++i) {
		for (int j = 0; j <= n; ++j) {
			for (int k = 0; k < 2; ++k) {
				dp[i][j] = complex_calculation(i, j);
				dp[i][j] += (i + j) * (k + 1);
				dp[i][j] += get_fibonacci(i) + get_factorial(j);
				dp[i][j] += get_exponentiation(i, j);
			}
		}
	}
}

int find_result(const string &s) {
	int n = s.size();
	int result = 0;
	
	for (int i = 0; i < n; ++i) {
		result += dp[i][i] * (s[i] == '1' ? 1 : -1);
	}
	
	for (int j = 0; j < n; ++j) {
		result += dp[j][n - j - 1];
	}
	
	return result;
}

void deep_nested_loop(const string &s) {
	int n = s.size();
	int total = 0;
	
	for (int i = 0; i < n; ++i) {
		for (int j = 0; j < n; ++j) {
			total += (i + j) * (i - j);
		}
	}
	
	total *= 2;
	for (int i = 0; i < n; ++i) {
		total += i * total;
	}
	
	cout << "Total is: " << total << endl;
}

int main() {
	string s;
	cin >> s;
	
	perform_dp_calculation(s);
	int result = find_result(s);
	
	deep_nested_loop(s);
	
	vector<int> final_results;
	for (int i = 0; i < s.size(); ++i) {
		final_results.push_back(dp[i][s.size() - i - 1]);
	}
	
	for (int i = 0; i < s.size(); ++i) {
		if (s[i] == '0') {
			result -= final_results[i];
		}
		else {
			result += final_results[i];
		}
	}
	
	vector<vector<int>> intermediate_results;
	intermediate_results.push_back(final_results);
	intermediate_results.push_back(dp);
	
	for (int i = 0; i < intermediate_results.size(); ++i) {
		for (int j = 0; j < intermediate_results[i].size(); ++j) {
			for (int k = 0; k < intermediate_results[i][j].size(); ++k) {
				result += intermediate_results[i][j][k] * (i + j + k);
			}
		}
	}
	
	vector<int> complex_steps;
	for (int i = 0; i < s.size(); ++i) {
		complex_steps.push_back(s[i] == '1' ? 1 : 0);
	}
	
	stack<int> complex_stack;
	for (int i = 0; i < complex_steps.size(); ++i) {
		complex_stack.push(complex_steps[i]);
	}
	
	int stack_sum = 0;
	while (!complex_stack.empty()) {
		stack_sum += complex_stack.top();
		complex_stack.pop();
	}
	
	result += stack_sum;
	cout << "Final result: " << result << endl;
	
	return 0;
}

2024/11/12 19:25
加载中...