/* 2019-12 Jedrzej Pacanowski
* PA2019 apb */
#include <iostream>
#include <vector>
typedef unsigned long long u64;
/// ilosc mozliwych dodawan (cyfry)
u64 sposoby(u64 num){
if(num < 10) return num+1;
if(num < 20) return 19-num;
else return 0; // ???
}
u64 solve(const std::vector<unsigned char>& num, u64 idx=0)
{
u64 sz = num.size();
if(sz-idx == 0)return 1;
if(sz-idx == 1)return sposoby(num[idx]);
u64 result = sposoby(num[idx]) * solve(num,idx+1);
if(sz-idx >=1 && num[idx+1] == 1)
result += sposoby(10+num[idx]) * solve(num,idx+2);
return result;
}
int main()
{
std::cin.tie(0); std::ios_base::sync_with_stdio(false);
u64 liczba; // [1 ; 10**18)
std::cin >> liczba;
std::vector<unsigned char> num;
num.reserve(20);
u64 i = liczba;
while(i>0){
unsigned char _cyfra = i % 10;
i /= 10;
num.push_back(_cyfra);
}
std::cout << solve(num) <<'\n';
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | /* 2019-12 Jedrzej Pacanowski * PA2019 apb */ #include <iostream> #include <vector> typedef unsigned long long u64; /// ilosc mozliwych dodawan (cyfry) u64 sposoby(u64 num){ if(num < 10) return num+1; if(num < 20) return 19-num; else return 0; // ??? } u64 solve(const std::vector<unsigned char>& num, u64 idx=0) { u64 sz = num.size(); if(sz-idx == 0)return 1; if(sz-idx == 1)return sposoby(num[idx]); u64 result = sposoby(num[idx]) * solve(num,idx+1); if(sz-idx >=1 && num[idx+1] == 1) result += sposoby(10+num[idx]) * solve(num,idx+2); return result; } int main() { std::cin.tie(0); std::ios_base::sync_with_stdio(false); u64 liczba; // [1 ; 10**18) std::cin >> liczba; std::vector<unsigned char> num; num.reserve(20); u64 i = liczba; while(i>0){ unsigned char _cyfra = i % 10; i /= 10; num.push_back(_cyfra); } std::cout << solve(num) <<'\n'; return 0; } |
English