D - Ugly Problem HDU - 5920
You are given a positive integer. You must represent that number by sum of palindromic numbers.
A palindromic number is a positive integer such that if you write
out that integer as a string in decimal without leading zeros, the
string is an palindrome. For example, 1 is a palindromic number and 10
is not.
For each test case, there is only one line describing the given integer s (1≤s≤101000).OutputFor each test case, output “Case #x:” on the first line
where x is the number of that test case starting from 1. Then output the
number of palindromic numbers you used, n, on one line. n must be no
more than 50. en output n lines, each containing one of your
palindromic numbers. Their sum must be exactly s.Sample Input
2
18
1000000000000
Sample Output
Case #1:
2
9
9
Case #2:
2
999999999999
1
Hint
9 + 9 = 18
999999999999 + 1 = 1000000000000
OJ-ID:
hdu-5920
author:
Caution_X
date of submission:
20191029
tags:
模拟
description modelling:
给定一个数n,把n拆成若干个数相加,且这若干个数是回文串
输出:输出拆成了多少个数以及每一个数的大小
major steps to solve it:
把一个数随机拆成两个回文串显然十分不现实。
我们可以把一个按照它所能拆的最大回文串来拆:n=n1(回文串)+n2
若n2不是回文串,n2代替n的位置继续拆出新数,若n2也是回文串,结束,输出答案。
warnings:
n=10特判
AC code:
#include<bits/stdc++.h>
using namespace std;
char num[],sub[];
char ans[][];
char one[]="";
bool judge(char *s){//判断当前数字是否为回文数字
int lens = strlen(s);
for(int i = ;i<lens/;i++){
if(s[i]!=s[lens - i - ]){
return false;
}
}
return true;
}
void decrease(char *s1,char *s2)
{
int len1=strlen(s1);
int len2=strlen(s2);
int i=len1-,j=len2-,flag=;
while(i>=&&j>=) {
if(s1[i]-''-flag>=) {
s1[i]-=flag;
flag=;
}
else {
s1[i] = s1[i] + - flag;
flag = ;
}
if(s1[i]>=s2[j]) {
s1[i]=s1[i]-s2[j]+'';
}
else {
s1[i]=s1[i]+-s2[j]+'';
flag=;
}
i--,j--;
}
while(i>=&&flag) {
if(s1[i]-''>=flag) {
s1[i]-=flag;
flag=;
}
else {
s1[i]=s1[i]+-flag;
flag=;
}
i--;
}
int id=;
bool pre_0=true;
char tmp[];
memset(tmp,,sizeof(tmp));
for(int k=;k<len1;k++) {
if(s1[k]==''&&pre_0) continue;
if(s1[k]!=''&&pre_0) pre_0=false;
tmp[id++]=s1[k];
}
if(!id) {
tmp[id++]='';
}
tmp[id]='\0';
strcpy(s1,tmp);
}
void palindromic(char *s1,char *s2)
{
int len1=strlen(s1),len2;
if(len1==&&s1[]==''&&s1[]==''){
s2[]='';
s2[]='\0';
return;
}
if(len1&) len2=len1/+;
else len2=len1/;
for(int i=;i<len2;i++) {
s2[i]=s1[i];
}
s2[len2]='\0';
decrease(s2,one);
if(s2[]=='') {
s2[]='';
}
for(int i=len1-,j=;j<i;j++,i--) {
s2[i]=s2[j];
}
s2[len1]='\0';
}
int main()
{
//freopen("input.txt","r",stdin);
int T,kase=;
scanf("%d",&T);
while(T--) {
scanf("%s",num);
int id=;
while(num[]!=''&&id<) {
if(judge(num)) {
strcpy(ans[id++],num);
break;
}
memset(sub,,sizeof(sub));
palindromic(num,sub);
strcpy(ans[id++],sub);
decrease(num,sub);
}
printf("Case #%d:\n%d\n",kase++,id);
for(int i=;i<id;i++) {
printf("%s\n",ans[i]);
}
}
}
D - Ugly Problem HDU - 5920的更多相关文章
- HDU 5920 Ugly Problem 【模拟】 (2016中国大学生程序设计竞赛(长春))
Ugly Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tota ...
- hdu-5920 Ugly Problem(贪心+高精度)
题目链接: Ugly Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Other ...
- Ugly Problem
Ugly Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Spec ...
- hdu 5920(模拟)
Ugly Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Tota ...
- Flow Problem HDU - 3549
Flow Problem HDU - 3549 Network flow is a well-known difficult problem for ACMers. Given a graph, yo ...
- Prime Ring Problem HDU - 1016 (dfs)
Prime Ring Problem HDU - 1016 A ring is compose of n circles as shown in diagram. Put natural number ...
- HDU - 5920 Ugly Problem 求解第一个小于n的回文数
http://acm.hdu.edu.cn/showproblem.php?pid=5920 http://www.cnblogs.com/xudong-bupt/p/4015226.html 把前半 ...
- HDU 5920 Ugly Problem
说起这道题, 真是一把辛酸泪. 题意 将一个正整数 \(n(\le 10^{1000})\) 分解成不超过50个回文数的和. 做法 构造. 队友UHC提出的一种构造方法, 写起来比较方便一些, 而且比 ...
- HDU 5920 Ugly Problem 高精度减法大模拟 ---2016CCPC长春区域现场赛
题目链接 题意:给定一个很大的数,把他们分为数个回文数的和,分的个数不超过50个,输出个数并输出每个数,special judge. 题解:现场赛的时候很快想出来了思路,把这个数从中间分为两部分,当位 ...
随机推荐
- redis实现分布式锁--工具类
1.引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...
- (理论知识+HTML+CSS+JavaScript)
今天分享的面试题的答案不确保一定正确,如有错误或有更好的解法,大家可以留言分享你的答案.我在留言区等你更好的答案. 一.理论基础知识部分 1.1.讲讲输入完网址按下回车,到看到网页这个过程中发生了什么 ...
- ccf-csp201909题解
目录 ccf-csp201909题解 1. 201909-1 小明种苹果 题目描述 解析 通过代码 2. 201909-2 小明种苹果(续) 题目描述 解析 通过代码 3. 201909-3 字符画 ...
- 第04组 Beta版本演示
小组信息 组名:斗地组 组长博客:地址 组内成员: 组员 学号 林涛(组长) 031702616 童圣滔 031702117 林红莲 031702213 潘雨佳 031702214 覃鸿浩 03170 ...
- 面试知识点 html css(经常更新)
1.HTML5语义化 什么是语义化 用合理.正确的标签来展示内容,比如h1~h6定义标题 好处 易于用户阅读,样式丢失的时候能让页面呈现清晰的结构. 有利于SEO,搜索引擎根据标签来确定上下文和各个关 ...
- 分布式文件服务器FastDFS的使用
分布式项目中涉及到的文件上传与下载,此时使用之前的上传方式,将上传的文件与当前项目所在服务器放在同一个位置,显然不符合分布式项目的理念,此时我们借助FastDFS将上传的文件数据存储到单纯的一个服务器 ...
- 使用VBA从工作表中读图片,以及给工作表中写文件
因为工作的原因,需要用到VBA,碰到读图片和写图片: Sub Macro01() '从工作表中保存图片 Application.ScreenUpdating = False Dim pth, shp, ...
- SSM整合3(springMVC+mybatis)
一.RequestMapping URL路径映射:置于方法上,可多个URL映射同一个方法,格式:@RequestMapping(value="item")或@RequestMapp ...
- docker中安装宝塔面板
我的电脑是win10,安装的virtualbox其上装的ubutun14,ubutun也安装了docker,今天我补充一个完整的操作流程.怎么在docker中安装宝塔面板?先打个岔,这些命令总是记不住 ...
- VMware+node+nginx+vue
1.安装CentOS 这里不再复述,不会的请移步VMware虚拟机安装centos7 2.部署 1.安装 node.js cd /usr/local/ wget https://nodejs.or ...