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 62 63 64 65 66
| #include <bits/stdc++.h> using namespace std; typedef long long ll; #define sf(n) scanf("%d",&n) #define pf(n) printf("%d",n) #define pfc(c) printf(c) #define fi(i,s,t) for(int i=s;i<t;i++) #define fd(s,t) for(int i=s-1;i>=t;i--) #define mem(a,c) memset(a,c,sizeof(a)) const int INF=0x3f3f3f3f; const int MAX=14000; int n,a[10]={6,2,5,5,4,5,6,3,7,6}; int c[6]={2,3,4,5,6,7},ans; int x,y,z,t[21][MAX],cnt[21]; vector<int> v[10]; void init(){ v[2].push_back(1); v[3].push_back(7); v[4].push_back(4); v[5].push_back(2);v[5].push_back(3);v[5].push_back(5); v[6].push_back(0);v[6].push_back(6);v[6].push_back(9); v[7].push_back(8); } void dfs(int x,int pre,int flag,int a[],int *cnt){ if(x<0) return; if(x==0) a[(*cnt)++]=pre; fi(i,0,6){ fi(j,0,v[c[i]].size()){ if(!flag&&v[c[i]][j]==0&&x!=6) continue; if(!v[c[i]][j])flag=1; dfs(x-c[i],pre * 10 + v[c[i]][j],flag,a,cnt); } } } void init_i(){ fi(i,1,21){ dfs(i,0,false,t[i],&cnt[i]); } } int cal(int x){ int cnt=0; while(x){ cnt +=a[x %10]; x /=10; } return cnt; } int main(){ freopen("in","r",stdin); init();init_i(); sf(n); n-=4;ans =0; fi(i,1,n+1){ fi(j,1,n+1-i){ int k= n - i -j; fi(l,0,cnt[i]) fi(m,0,cnt[j]){ int tmp= t[i][l]+t[j][m]; if(cal(tmp)==k) ans ++; } } } pf(ans); return 0; }
|