Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
34433 liuyile 【S】T3 C++ 通过 100 769 MS 6524 KB 6790 2024-11-07 20:07:08

Tests(10/10):


#include<bits/stdc++.h> using namespace std; #define int long long int n,m; inline int gen(int x){ int k=0; while(x)k=k*10+x%10,x/=10; return k; } int pw[111]; inline bool chk(int x){ if(x<=0)return 0; return gen(x)==x; } inline int ct(int x){ int c=0; while(x)x/=10,c++; return c; } inline pair<int,int> F(int x){ int y=gen(x); int c=ct(x); return {x*pw[c]+y,x/10*pw[c]+y}; } inline int force(int n){ int res=0; for(int i=1;i<1e7;i++){ pair<int,int>A=F(i); // if(i%100000000==0) // cerr<<i<<" "<<A.first<<" "<<A.second<<endl; if(n-A.first>A.first){ if(chk(n-A.first)) res++;//,cout<<A.first<<" "<<n-A.first<<endl; } if(n-A.second>A.second){ if(chk(n-A.second)) res++;//,cout<<A.second<<" "<<n-A.second<<endl; } } res*=2; if(n%2==0&&n/2<1e14)res+=chk(n/2); return res; } int f[2][2][2][10][10000]; signed main(){ ios::sync_with_stdio(0); cin.tie(0),cout.tie(0); // freopen("palindrome.in","r",stdin); // freopen("palindrome.out","w",stdout); cin>>n; pw[0]=1; for(int i=1;i<=10;i++) pw[i]=pw[i-1]*10; if(n<=1e14) cout<<force(n)<<endl; else{ pw[0]=1; pw[1]=10; pw[2]=100; pw[3]=1000; pw[4]=10000; int res=force(n); string s=to_string(n); reverse(s.begin(),s.end()); bool ex=0; if(s.size()==19)s.pop_back(),ex=1; for(char &x:s)x-='0'; for(int a=s.size()-2;a<=s.size()-1;a++) for(int b=14;b<=a;b++){ memset(f,0,sizeof(f)); if(a==s.size()-2&&(ex||s.back()!=1))continue; bool fl=0; if(a==s.size()-2)fl=1; f[fl][ex][0][0][0]=1; // cout<<fl<<" "; for(int i=0;i<s.size();i++){ fl^=1; memset(f[fl],0,sizeof(f[fl])); if(fl){ int id=i/2; // cout<<id<<" "; for(int p=0;p<=1;p++) for(int q=0;q<=1;q++) for(int aq=0;aq<=1;aq++) for(int l=0;l<=9;l++) for(int S=0;S<=9999;S++)if(f[!fl][p][q][l][S]){ int x=s[id]+10*aq-q; if(x<0)continue; for(int j=0;j<=9;j++){ int k=x-j; if(k<0||k>9)continue; int T=S/10+1000*k; // if(a==b+1) // cout<<i<<" "<<p<<" "<<q<<" "<<l<<" "<<S<<" "<<id<<" "<<x<<endl; // cout<<k<<" "<<S<<" "<<T<<endl; f[fl][p][aq][j][T]+=f[!fl][p][q][l][S]; } } } else{ int id=s.size()-i/2-1; // cout<<id<<" "; for(int p=0;p<=1;p++) for(int q=0;q<=1;q++) for(int ap=0;ap<=1;ap++) for(int l=0;l<=9;l++) for(int S=0;S<=9999;S++)if(f[!fl][p][q][l][S]){ // if(b==15) // cout<<p<<" "<<q<<" "<<l<<" "<<S<<" "<<f[!fl][p][q][l][S]<<endl; int x=s[id]+10*p-ap; if(x<0)continue; int j=l; int k=x-j; if(k<0)continue; if(id>a&&j)continue; if(id==a&&!j)continue; if(id<=a&&j!=l)continue; if(id>b&&k)continue; if(id==b&&!k)continue; if(id<=b&&k!=S/pw[3-(a-b)]%10)continue; // if(a==b+1){ // cout<<i<<" "<<j<<" "<<k<<"::"; // cout<<ap<<" "<<q<<" "<<l<<" "<<S<<endl; // cout<<id<<" "<<l<<" "<<S<<" "<<f[!fl][p][q][l][S]<<endl; // cout<<endl; // } f[fl][ap][q][l][S]+=f[!fl][p][q][l][S]; } } } int ct=0; for(int p=0;p<=1;p++) for(int l=0;l<=9;l++) for(int S=0;S<=9999;S++)if(f[fl][p][p][l][S]){ if(fl){ if(S/pw[3-(a-b)]==0||chk(S/pw[3-(a-b)])) ct+=f[fl][p][p][l][S]; } else{ if(S/pw[4-(a-b)]==0||chk(S/pw[4-(a-b)])){ // cout<<p<<" "<<l<<" "<<S<<" "<<f[fl][p][p][l][S]<<endl; ct+=f[fl][p][p][l][S]; } } } // if(ct){ // for(int S=0;S<=9999;S++) // } // if(a==15&&b==14){ // for(int S=0;S<=9999;S++) // if(chk(S/pw[4-(a-b)]))cout<<S<<" "; // } if(a==b)res+=ct; else res+=2*ct; // if(a==b) // cout<<a+1<<" "<<b+1<<" "<<ct<<endl; // exit(0); } cout<<res<<endl; } cout.flush(); return 0; } /* 123456789123456789 2 :8739378008739378 114717411114717411 1791357924682468 2 :7958474748597 1783399449933871 */


测评信息: