51nod1016
1016 水仙花数 V2
- 1 秒
- 131,072 KB
- 160 分
- 6 级题
收起
输入
一个整数M(10 <= M <= 10^60)
输出
输出>= M的最小的水仙花数,如果没有符合条件的水仙花数,则输出:No Solution
输入样例
300
输出样例
370 sol:好像标算是打表,感觉非常假,然后百度可知水仙花数一共只有89个,所以完全可行
贴上ak王xmy的打表代码以供参考
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int M=1e9;
struct NUM{//压位高精
int t;ll a[];
friend NUM operator+(NUM x,NUM y){
int i;
for (i=;i<x.t || i<y.t || x.a[i];i++){
if (i+>=x.t) x.a[i+]=;
if (i<y.t) x.a[i]+=y.a[i];
if (x.a[i]>=M) x.a[i+]++,x.a[i]-=M;
}
x.t=i;
return x;
}
friend NUM operator*(NUM x,int y){
int i;
for (i=;i<x.t;i++) x.a[i]*=y;
for (i=;i<x.t || x.a[i];i++){
if (i+>=x.t) x.a[i+]=;
x.a[i+]+=x.a[i]/M,x.a[i]%=M;
}
x.t=i;
return x;
}
}f[][],s;//f[i][j]=i^j
int n,a[],c[],d[],t1,t2,n1[],n2[];
void dfs(int x,int y,NUM s){
t2=;
memset(c,,sizeof(c));
for (int i=;i<s.t;i++){
int t=s.a[i];
for (int j=;j<;j++) c[n2[t2++]=t%]++,t/=;
}
while (t2 && !n2[t2-]) t2--;
if (t2>n) return;
t1=;
NUM tmp=s+f[x][n]*(n-y);//最大能得到的数
for (int i=;i<tmp.t;i++){
int t=tmp.a[i];
for (int j=;j<;j++) n1[t1++]=t%,t/=;
}
while (t1 && !n1[t1-]) t1--;
if (t1<n) return;
if (x && t1==t2){
memset(d,,sizeof(d));
for (int i=n-;~i;i--)
if (n1[i]!=n2[i]) break;
else d[n1[i]]++;
for (int i=x+;i<=;i++)
if (a[i]<d[i]) return;
}
if (!x){
for (int i=;i<=;i++)
if (a[i]!=c[i]) return;
for (int i=t2-;~i;i--) putchar(n2[i]|);
puts("");
return;
}
for (int i=;i<=n-y;i++){
a[x]=i;
dfs(x-,y+i,s);
s=s+f[x][n];
}
}
int main(){
puts("");
for (int i=;i<;i++){
f[i][].t=f[i][].a[]=;
for (int j=;j<;j++) f[i][j]=f[i][j-]*i;
}
for (int i=;i<=;i++) n=i,dfs(,,s);
}
make
51nod1016的更多相关文章
随机推荐
- Angularjs 过滤器使用
Filter:格式化数据 // HTML表达式: {{ filter_expression | filter : expression : comparator}} // JS表达式: $filt ...
- leetcode:Single Number
public int SingleNumber(int[] nums) { if(nums==null||nums.Length%2==0) return 0; int ret=nums[0]; fo ...
- c# 打印 主板信息CPU信息
Win32_Processor CPU 参数说明: AddressWidth --在32位操作系统,该值是32,在64位操作系统是64.Architecture --所使用的平台的处理器架构.Asse ...
- java 加密 解密 Illegal key size
java.security.InvalidKeyException: Illegal key size 今天遇到一个奇怪的问题. 自己做的加签验签功能已经没有问题了,本地测试通过,同事放到服务器上 ...
- 序列化与ArrayList 的elementData的修饰关键字transient
transient用来表示一个域不是该对象序行化的一部分,当一个对象被序行化的时候,transient修饰的变量不会被序列化 ArrayList的动态数组elementData被transient ...
- .net core实践系列之短信服务-Sikiro.SMS.Job服务的实现
前言 本篇会继续讲解Sikiro.SMS.Job服务的实现,在我写第一篇的时候,我就发现我当时设计的架构里Sikiro.SMS.Job这个可以选择不需要,而使用MQ代替.但是为了说明调度任务使用实现也 ...
- [Loadrunner参数化]一个文件输两列参数的取值
关于LoadRunner参数化的内容,在脚本开发中属于非常重要的一个知识点.关于这部分知识,在书上和网上到处都能找到,本篇只讲一种特殊情况:一个参数化文件为File类型,有多列值,如何进行参数化取值. ...
- 【转载】SQL中inner join、outer join和cross join的区别
对于SQL中inner join.outer join和cross join的区别很多人不知道,我也是别人问起,才查找资料看了下,跟自己之前的认识差不多, 如果你使用join连表,缺陷的情况下是inn ...
- 海康威视笔试(C++)
1. select和epoll的区别 2.服务器并发量之高性能服务器设计 3.SQL关键字 4.TCP乱序和重传的问题 5.c++对象内存分配问题 6.c++多线程 join的用法: Thread类的 ...
- POJ - 2528 区间离散化,线段树区间修改,区间询问
这个题非常有意思的地方是,我们发现区间[1,4]和[5,8]是紧挨着的,因为这个的数代表的是一段区间,原本我们对于普通的离散, a[1]=1,a[2]=5,a[3]=6,a[4]=8;数组下标就是重新 ...