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的更多相关文章
随机推荐
- 为什么C++11引入了std::ref?
C++本身有引用(&),为什么C++11又引入了std::ref? 主要是考虑函数式编程(如std::bind)在使用时,是对参数直接拷贝,而不是引用.如下例子: #include <f ...
- C# 设置最顶层窗口。TopMostWindow
code: namespace LOLMM { /// <summary> /// Interaction logic for MainWindow.xaml /// </summa ...
- Git安装以及常用命令(图文详解)
**Git安装以及常用命令** 1.下载安装Git,傻瓜式安装相信大家都会. 官网下载地址:[https://git-scm.com/downloads] 2.Git基本操作 (1)git --ver ...
- Kafka 入门三问
目录 1 Kafka 是什么? 1.1 背景 1.2 定位 1.3 产生的原因 1.4 Kafka 有哪些特征 消息和批次 模式 主题和分区 生产者和消费者 broker 和 集群 1.5 Kafka ...
- mysql自增id超大问题查询
引言 小A正在balabala写代码呢,DBA小B突然发来了一条消息,"快看看你的用户特定信息表T,里面的主键,也就是自增id,都到16亿了,这才多久,在这样下去过不了多久主键就要超出范围了 ...
- Rollup处理并打包JS文件项目实例
关于Rollup rollup是一款用来es6模块打包代码的构建工具(支持css和js打包).当我们使用ES6模块编写应用或者库时,它可以打包成一个单独文件提供浏览器和Node.js来使用. 它的优点 ...
- find和grep命令合集
linux grep命令 1.作用Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expressi ...
- vue组件化开发组件拆分原则是什么
原则:可复用.可组合: 两大类:页面组件.功能组件: 除了公共头导航.侧导航.脚部内容,还有:
- 软件扒网站? 爬虫? F12查看源码? 查看网页源代码?浏览器sources? 区别和联系!
1.软件扒网站: 利用各类扒站网站,如仿站小工具8.0,可以按照规则将网站的未经浏览器简析的前端代码扒下来,并整理成css,js,html等文件夹,很方便.(当然看不到ajax等相关代码) 备注:如果 ...
- 利用tushare进行对兴业银行股价的爬取,并使用numpy进行分析
import sysimport tushare as tsimport numpy as npdata=ts.get_h_data('601066')print(data)#读出兴业银行7列数据da ...