Submission #1350340

#TimeUsernameProblemLanguageResultExecution timeMemory
1350340Jawad_Akbar_JJSlon (COCI15_slon)C++20
0 / 120
2 ms580 KiB
#include <iostream>

using namespace std;
#define int long long
string A;
int M, P, ind;

void Mod(int &x){
	x %= M;
	if (x < 0)
		x += M;
}

pair<int, int> solve(int &i){
	int k = 0, v = 0, init = i;
	if (A[i] == '('){
		i++;
		int mul = 1;
		while (A[i] != ')'){
			auto [k1, v1] = solve(i);
			v = v + mul * v1, k = k + mul * k1;

			if (A[i] == '+')
				mul = 1, i++;
			else if (A[i] == '-')
				mul = -1, i++;
			Mod(v), Mod(k);
		}
		i++;
		if (i < A.size() and A[i] == '*'){
			i++;
			auto [k1, v1] = solve(i);
			k = k1 * v + k * v1;
			v = v1 * v;
			Mod(v), Mod(k);
		}
		return {k, v};
	}

	if (A[i] == 'x'){
		k = 1, i++;
	}
	else{
		while (isdigit(A[i])){
			v = v * 10 + A[i] - '0', i++;
			Mod(v);
		}
	}


	if (A[i] == '*'){
		i++;
		auto [k1, v1] = solve(i);
		k = k1 * v + k * v1;
		v = v1 * v;
	}
	else if (A[i] == '+'){
		i++;
		auto [k1, v1] = solve(i);
		k += k1, v += v1;
	}
	else if (A[i] == '-'){
		i++;
		auto [k1, v1] = solve(i);
		k -= k1, v -= v1;
	}
	Mod(v), Mod(k);
 
	// cout<<init<<' '<<i<<' '<<k<<' '<<v<<endl;
	return {k, v};
}

signed main(){
	cin>>A>>P>>M;

	A = '(' + A + ')';
	auto [k, v] = solve(ind);

	cout<<k<<' '<<v<<endl;

	for (int i=0;i<M;i++)
		if ((k * i + v) % M == P)
			return cout<<i<<'\n', 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...