Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
34370 | A21μΘ_wjy | 【S】T3 | C++ | 解答错误 | 30 | 81 MS | 47136 KB | 1752 | 2024-11-07 18:04:16 |
#include<bits/stdc++.h> #define int long long using namespace std; const int B=3e6+7; int Pow10[20]; int LG[B]; inline void Init(){ Pow10[0]=1; for(int i=1;i<=18;i++)Pow10[i]=Pow10[i-1]*10; LG[0]=0; for(int i=1;i<B;i++)LG[i]=LG[i/10]+1; } inline bool Palind(int x){ if(!x)return 0; vector<int> v; while(x){v.push_back(x%10);x/=10;} int cnt=v.size(); for(int i=0;i<cnt;i++)if(v[i]!=v[cnt-1-i])return 0; return 1; } inline int Rev(int x){ if(!x)return 0; vector<int> v; while(x){v.push_back(x%10);x/=10;} int cnt=v.size(); int ret=0; for(int i=0;i<cnt;i++)ret=(ret*10+v[i]); return ret; } int n; int Pal[B]; int cnt=0; inline void sub1(){ cnt=0; for(int i=1;i<=n;i++)if(Palind(i))Pal[++cnt]=i; int ret=0; for(int i=1;i<=cnt;i++){ for(int j=i+1;j<=cnt;j++)if(Pal[i]+Pal[j]==n)++ret; } ret<<=1; for(int i=1;i<=cnt;i++)if(Pal[i]+Pal[i]==n)ret++; cout<<ret<<endl; } int UB=1e12; inline void Gen(){ for(int i=1;i<=9;i++)Pal[++cnt]=i; for(int Pre=1;Pre<=99999;Pre++){ int Suf=Rev(Pre); int L=LG[Pre]; int PL=Pre*Pow10[L]+Suf; if(PL<=UB)Pal[++cnt]=PL; for(int p=0;p<=9;p++){ PL=Pre*Pow10[L+1]+p*Pow10[L]+Suf; if(PL<=UB)Pal[++cnt]=PL; } } sort(Pal+1,Pal+cnt+1); } inline void sub2(){ cnt=0; Gen(); int L=1,R=cnt; int ans=0; while(Pal[L]<=n){ while(Pal[R]>n-Pal[L]&&R>1)R--; if(Pal[L]+Pal[R]==n)ans++; L++; } cout<<ans<<endl; } signed main(){ Init(); cin>>n; if(n<=2000){ sub1(); return 0; } sub2(); }