Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- //Manual string to integer conversion
- // long long strToNum(const string &s) {
- // long long result = 0;
- // for (char c : s) {
- // result = result * 10 + (c - '0');
- // }
- // return result;
- // }
- void solve(string &queryString, string &s1, string &s2, string &s3, vector<int> &mappings, vector<bool> &assigned, int index, int &count){
- if(index >= queryString.size()){
- string s1Mapping = "", s2Mapping = "", s3Mapping = "";
- for(char c : s1){
- s1Mapping += to_string(mappings[c - 'a']);
- }
- for(char c : s2){
- s2Mapping += to_string(mappings[c - 'a']);
- }
- for(char c : s3){
- s3Mapping += to_string(mappings[c - 'a']);
- }
- long long s1s2MappingNumber = stoll(s1Mapping) + stoll(s2Mapping);
- if(s1s2MappingNumber == stoll(s3Mapping)){
- count++;
- for(int i = 0; i < mappings.size(); i++){
- if(mappings[i] != -1){
- cout << char('a' + i) << "-" << mappings[i] << " ";
- }
- }
- cout << '\n';
- }
- return;
- }
- char ch = queryString[index];
- if(mappings[ch - 'a'] == -1){
- for(int i = 0; i < 10; i++){
- if(!assigned[i]){
- assigned[i] = true;
- mappings[ch - 'a'] = i;
- solve(queryString, s1, s2, s3, mappings, assigned, index + 1, count);
- assigned[i] = false;
- }
- }
- mappings[ch - 'a'] = -1;
- }
- else{
- solve(queryString, s1, s2, s3, mappings, assigned, index + 1, count);
- }
- }
- void getCryptMapping(string &s1, string &s2, string &s3){
- string queryString = s1 + s2 + s3;
- vector<int> mappings(26, -1);
- vector<bool> assigned(10, false);
- int count = 0;
- solve(queryString, s1, s2, s3, mappings, assigned, 0, count);
- cout << "count: " << count << '\n';
- }
- int main() {
- // your code goes here
- string s1, s2, s3;
- cin >> s1 >> s2 >> s3;
- getCryptMapping(s1, s2, s3);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement