zoukankan      html  css  js  c++  java
  • AT2582 Mirrored

    传送门

    智障爆搜题
    可以发现题目给出的式子可以移项
    然后就是(rev(N)-N=D)
    然后假设(N=a_1*10^{n-1}+a_2*10^{n-2}+...+a_{n})
    那么(rev(N)=a_n*10^{n-1}+a_{n-1}*10^{n-2}+...+a_{1})
    就容易得到(sum_{i=1}^{n/2}(a_n-a_{n-i+1})*(10^{n-i}-10^{i-1}))
    随便dfs一下就好了,注意一下一个n位的数可能由比n位大的数得到
    代码:

    #include<cstdio>
    #include<algorithm>
    #include<cstring>
    #include<iostream>
    #include<queue>
    #include<cmath>
    using namespace std;
    void read(int &x){
    	char ch;bool ok;
    	for(ok=0,ch=getchar();!isdigit(ch);ch=getchar())if(ch=='-')ok=1;
    	for(x=0;isdigit(ch);x=x*10+ch-'0',ch=getchar());if(ok)x=-x;
    }
    #define rg register
    const int maxn=1e5+10;
    int mm,m,n,a[60];
    long long f[60];
    long long ans;
    void dfs(int x,int n,long long sum){
    	if(x==n/2+1){
    		if(sum==m){
    			long long now=a[1]>=0?(9-a[1]):(9+a[1]);
    			for(rg int i=2;i<x;i++)now=now*(a[i]>=0?(10-a[i]):(10+a[i]));
    			ans+=n&1?now*10:now;
    		}
    		return ;
    	}
    	if(sum+10ll*(f[n-x]-f[x-1])<m||sum-10ll*(f[n-x]-f[x-1])>m)return ;
    	for(rg int i=-9;i<10;i++){
    		a[x]=i;
    		dfs(x+1,n,sum+1ll*a[x]*(f[n-x]-f[x-1]));
    	}
    }
    int main(){
    	read(m),mm=m;f[0]=1;
    	while(mm)n++,mm/=10;
        for(rg int i=1;i<=18;i++)f[i]=f[i-1]*10;
    	for(rg int i=n;i<=18;i++)dfs(1,i,0);
    	printf("%lld
    ",ans);
    }
    
    
  • 相关阅读:
    个人对BFC的见解
    事件简单示例
    visual studio .net 2003
    C# Dictionary 的几种遍历方法
    C# 监听文件夹
    调用SAP dll 出现 试图加载格式不正确的程序
    SAP Connector 类概述
    Sapnco3.0 RFC Server Programs Receive Idocs
    微软工具下载地址
    Sapnco3.0 RFC Client Programs
  • 原文地址:https://www.cnblogs.com/lcxer/p/10740616.html
Copyright © 2011-2022 走看看