ALGORITHM/USACO

solving USACO dualpal problem in c++

Woogamza 2019. 8. 12. 14:43
728x90

각 base마다 한번씩 체크해주기만 하자.

체크한 횟수가 2회일경우 그것은 dualpal.

#include<fstream>
#include<algorithm>
#include <string>
#include <stdlib.h>
using namespace std;

char toChar(int a) {
	if (a > 10) {
		return 'A' + a - 10;
	}
	return a + '0';
}

string toBase(int target, int base) {
	string ret;
	while (target > 0) {
		int leftover = target % base;
		target /= base;
		ret += toChar(leftover);

	}
	return ret;
}


int main() {
	ofstream fout("dualpal.out");
	ifstream fin("dualpal.in");
	int N, S;
	fin >> N >> S;
	int check = 0;

	for (int i = S + 1;; i++) {
		int checkout = 0;
		for (int base = 2; base <= 10; base++) {
			string a;
			a = toBase(i, base);
			string dummy = a;
			reverse(dummy.begin(), dummy.end());
			if (a == dummy) {
				checkout++;
				if (checkout == 2) {
					fout << i << endl;
					check++;
					break;
				}
			}
		}
		if (check == N) {
			break;
		}
	}
}