曾经有一位国王,统治着一片未名之地。他膝下有三个女儿。

三个女儿中最年轻漂亮的当属Psyche。她的父亲不确定她未来的命运,于是他来到Delphi神庙求神谕。

神谕可以看作一个不含前导零的正整数n n n。

为了得到真正的预言,他可以将n n n的各个数位重新排列,并将其分成两个不含前导零的正整数。

请你帮助他求出这两个正整数最大的和。如果不存在这样的两个正整数,输出"Uncertain".

用getchar可以一个数字一个地读入,
对于一个十进制数,最多就是10个数字,使用计数可以很方便地进行排序,再用dfs
每十位十位地进行大数相加
写dfs的时候需要注意,把保存状态的临时数组定义在dfs里面

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <vector>
#define SET(x) memset(x,0,sizeof(x))
using namespace std;
int vis[];
void cacu(int x,int len)
{
if(x==&&len==) return;
if(x!=&&len==) {printf("%d",x);return;}
if(x==&&len!=)
{
while(len)
for(int i=;i>=;i--)
{
if(!vis[i]) continue;
vis[i]--;
printf("%d",i);
len--;
break;
}
return;
}
int g,f,w=,t;
g=x;
t=min(,len);
int num1[];
while(t--)
{
for(int i=;i<;i++)
{
if(!vis[i]) continue;
vis[i]--;
f=i+g;
if(f>) g=;
else g=;
num1[w++]=f%;
len--;
break;
}
}
cacu(g,len);
for(int i=max(w-,); i>=; i--) printf("%d",num1[i]);
}
int main()
{
int T;
scanf("%d",&T);
getchar();
for(; T; T--)
{
char x;
memset(vis,,sizeof(vis));
int len=;
while((x=getchar())&&x!='\n')
{
vis[x-'']++;
len++;
}
if(len<=)
{
puts("Uncertain");
continue;
}
int flag=,minx=;
for(int i=; i<=; i++)
{
if(vis[i]==) flag++;
else if(vis[i]>) flag=;
if(vis[i]) minx=min(minx,i);
}
if(flag<)
{
puts("Uncertain");
continue;
}
vis[minx]--;
cacu(minx,len-);
puts("");
}
return ;
}

hdu 5718(Oracle)大数加法的更多相关文章

  1. hdu 5718 Oracle 高精度

    Oracle Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others) Problem ...

  2. hdu 1002 Java 大数 加法

    http://acm.hdu.edu.cn/showproblem.php?pid=1002 PE   由于最后一个CASE不须要输出空行 import java.math.BigInteger; i ...

  3. HDU 5718 Oracle(高精度)

    Time Limit:4000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u Description There ...

  4. HDU 5718 Oracle

    如果非零的数小于等于1个,则无解.否则有解. 取出一个最小的非零的数作为一个数,剩下的作为一个数,相加即可. #include<cstdio> #include<cstring> ...

  5. 大数加法~HDU 1002 A + B Problem II

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1002 题意: 数学题,A+B; 思路,这个数非常大,普通加法一定会超时,所以用大数加法.大数加法的基 ...

  6. hdu 1002 A + B Problem II【大数加法】

    题目链接>>>>>> 题目大意:手动模拟大数加法,从而进行两个大数的加法运算 #include <stdio.h> #include <strin ...

  7. HDU——1715大菲波数(大数加法)

    大菲波数 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  8. java实现大数加法、乘法(BigDecimal)

    之前写过用vector.string实现大数加法,现在用java的BigDecimal类,代码简单很多.但是在online-judge上,java的代码运行时间和内存大得多. java大数加法:求a+ ...

  9. Hat's Fibonacci(大数加法+直接暴力)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=1250 hdu1250: Hat's Fibonacci Time Limit: 2000/1000 M ...

随机推荐

  1. ViewFlipper(翻转视图)的使用

    android developers java.lang.Object --android.view.View ----android.view.ViewGroup ------android.wid ...

  2. js中常用的操作

    1.js中常用的数组操作 2.js中常用的字符串操作 3.js中常用的时间日期操作 4.定时器

  3. Python之字符串小代码解析

    本篇只是拿一段代码来对python中的字符串的一些使用做解释,来让大家更加了解python Python 3.4.0 (v3.4.0:04f714765c13, Mar 16 2014, 19:25: ...

  4. windows下C++环境的配置

    方法一--VS: 使用windows开发神器visio studio.这种方法比较简单,直接下载一个最新的vs安装就行.不单单是C++,C.C#.VB等都可以开发. 方法二--只安装C++编译器: 最 ...

  5. Fedora22编译Qt3.3.X

    FC22编译QT3 安装g++ dnf install gcc-c++ 1,configure ./configure -thread -no-nis -system-libpng -system-l ...

  6. git使用简单教程

    废话不多说,直接开始 1. 进入https://github.com/ 创建你的账号,然后开始创建一个你的仓库(基本概念请自行百度),比如jun. 2. 创建好仓库之后,下载git 3,设置git,就 ...

  7. .net多线程

    线程 线程池 异步 异步更新winform界面 线程同步

  8. RHEL7学习之ISCSI配置

    ISCSI服务器:192.168.10.10 ISCSI客户端:192.168.10.20 在ISCSI服务器添加两块硬盘:/dev/sdb /de/sdc 一,在服务端安装 [root@localh ...

  9. Keras Installation

    #Install numpy and scipy sudo apt-get install gfortran libopenblas-dev liblapack-dev libatlas-base-d ...

  10. 获取当前运行dll文件的路径

    char moduledir[MAX_PATH];  GetModuleFileNameA(GetModuleHandleA("ppdl_BE081_BIW_seal_library.dll ...