#include<cstdio> #include<cstdlib> #include<cmath> #include<cstring> #include<cassert> #include<iostream> #include<algorithm> #include<queue> #include<stack> #include<bitset> #define REP(i,n) for(int i=0;i<(n);i++) #define FOR(i,a,b) for(int i=(a);i<=(b);i++) #define FORD(i,a,b) for(int i=(a);i>=(b);i--) #define foreach(i,c) for(__typeof((c).begin())i=(c).begin();i!=(c).end();i++) #define all(c) (c).begin(),(c).end() #define scanf(...) scanf(__VA_ARGS__)?:0 #define eprintf(...) fprintf(stderr,__VA_ARGS__),fflush(stderr) #define e1 first #define e2 second #define mp make_pair #define pb push_back #define eb emplace_back using namespace std; typedef long long ll; typedef long double ld; typedef unsigned int uint; typedef unsigned long long ull; typedef pair<int,int> pii; typedef pair<ll,ll> pll; typedef pair<ll,int> pli; typedef pair<int,ll> pil; ll k,a,b; int wynik=0; void dfs(ll x,int w,int ile,int c) { if (a>b) return; if (w>b/k) return; ll u=k*w; if (a<=u && u<=b) { ll s=x; int t[19],v[19],p=0,q=0; while (u) t[p++]=u%10,u/=10; while (s) v[q++]=s%10,s/=10; sort(t,t+p,greater<int>()); bool c=true; REP(i,q) if (t[i]!=v[i]) { c=false; break; } if (c) wynik++; } if (ile<18) FOR(i,c,9) dfs(10*x+i,w+i*i,ile+1,i); } int main() { scanf("%lld%lld%lld",&k,&a,&b); dfs(0,0,0,1); printf("%d",wynik); }
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 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | #include<cstdio> #include<cstdlib> #include<cmath> #include<cstring> #include<cassert> #include<iostream> #include<algorithm> #include<queue> #include<stack> #include<bitset> #define REP(i,n) for(int i=0;i<(n);i++) #define FOR(i,a,b) for(int i=(a);i<=(b);i++) #define FORD(i,a,b) for(int i=(a);i>=(b);i--) #define foreach(i,c) for(__typeof((c).begin())i=(c).begin();i!=(c).end();i++) #define all(c) (c).begin(),(c).end() #define scanf(...) scanf(__VA_ARGS__)?:0 #define eprintf(...) fprintf(stderr,__VA_ARGS__),fflush(stderr) #define e1 first #define e2 second #define mp make_pair #define pb push_back #define eb emplace_back using namespace std; typedef long long ll; typedef long double ld; typedef unsigned int uint; typedef unsigned long long ull; typedef pair<int,int> pii; typedef pair<ll,ll> pll; typedef pair<ll,int> pli; typedef pair<int,ll> pil; ll k,a,b; int wynik=0; void dfs(ll x,int w,int ile,int c) { if (a>b) return; if (w>b/k) return; ll u=k*w; if (a<=u && u<=b) { ll s=x; int t[19],v[19],p=0,q=0; while (u) t[p++]=u%10,u/=10; while (s) v[q++]=s%10,s/=10; sort(t,t+p,greater<int>()); bool c=true; REP(i,q) if (t[i]!=v[i]) { c=false; break; } if (c) wynik++; } if (ile<18) FOR(i,c,9) dfs(10*x+i,w+i*i,ile+1,i); } int main() { scanf("%lld%lld%lld",&k,&a,&b); dfs(0,0,0,1); printf("%d",wynik); } |