Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
34434 | liuyile | 【S】T3 | C++ | 通过 | 100 | 51 MS | 260 KB | 1373 | 2024-11-07 20:07:35 |
#include<bits/stdc++.h> #define rep(i,a,b) for(int i=(a);i<=(b);i++) #define per(i,a,b) for(int i=(a);i>=(b);i--) #define REP(i,n) for(int i=(0);i<(n);i++) using namespace std; typedef long long ll; const int N=20,inf=1e9; int t[N],c[N],a[N],b[N]; ll num,ans; int n,m; void same(){ rep(i,1,m)if(c[i]!=c[m+1-i])return; ll res=1; rep(i,1,(m+1)/2) res*=min(9,c[i]-(i==1))-max(c[i]-9,(i==1?1:0))+1; ans+=res; } #define OUT {flag=1;break;} void doit(){ rep(n,1,m-1){ memset(a,0x3f,sizeof a); memset(b,0x3f,sizeof b); per(i,m,1) if(a[i]>inf){ int x=c[i],p=i; while(a[p]>inf){ a[p]=x; p=m+1-p; a[p]=x; if(p<=n&&b[p]>inf){ b[p]=c[p]-a[p]; b[n+1-p]=b[p]; p=n+1-p; x=c[p]-b[p]; } } } int flag=0; rep(i,1,m)if(a[i]!=a[m+1-i]||a[i]<0||a[i]>9 ||a[i]+(i<=n?b[i]:0)!=c[i])OUT rep(i,1,n)if(b[i]!=b[n+1-i]||b[i]<0||b[i]>9)OUT if(!a[1]||!b[1])flag=1; ans+=2*(!flag); } } int main(){ // freopen("palindrome.in","r",stdin); // freopen("palindrome.out","w",stdout); for(cin>>num;num;num/=10)t[++n]=num%10; REP(s,(1<<(n-1))){ rep(i,1,n)c[i]=t[i]; rep(i,1,n-1)if(s>>(i-1)&1) c[i]+=10,c[i+1]--; for(m=n;!c[m];m--); int flag=0; rep(i,1,m)if(c[i]<0||c[i]>18)OUT if(!flag)same(),doit(); } return cout<<ans<<endl,0; }