//39360K 172MS C++
#include <cstdio>
#include <cstring>
const int MAX = 10000005;
long num[MAX];
long MIN(long a, long b) {
return a < b ? a: b;
}
void init() {
num[0] = 1;
int p1 = 0;
int p2 = 0;
for (int i = 1; i < MAX; i++) {
num[i] = MIN(2*num[p1] + 1, 3*num[p2] + 1);
if (num[i] == 2*num[p1] + 1) p1++;
if (num[i] == 3*num[p2] + 1) p2++;
}
}
int main() {
int ordinal;
init();
while(scanf("%d", &ordinal) != EOF) {
printf("%ld\n", num[ordinal - 1]);
}
}
poj-2545的简单变形,注意数组要开成long 的,long long的MLE了.