hdu5920 Ugly Problem【貪心+高精度減法】
/* ***********************************************
Author :Maltub
Email :[email protected]
Blog :htttp://www.xiang578.com
************************************************ */
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h>
//#include <bits/stdc++.h>
#define rep(i,a,n) for(int i=a;i<n;i++)
#define per(i,a,n) for(int i=n-1;i>=a;i--)
#define pb push_back
using namespace std;
typedef vector<int> VI;
typedef long long ll;
const ll mod=1000000007;
const int N=2048;
const int M=1e6+10;
char s[1024],t[1024];
vector<string>ans;
void sub()
{
// printf("%s %s ",s,t);
char x[1024];
memset(x,0,sizeof(x));
int m=strlen(t),n=strlen (s),j=0;
for(int i=0; i<m; i++)
{
if(j==1)
{
if(s[i]=='0')
{
j=1;
s[i]='9';
}
else
{
j=0;
s[i]--;
}
}
if(s[i]>=t[i])
{
x[i]=s[i]-t[i]+'0';
}
else
{
j=1;
x[i]=s[i]+10-t[i]+'0';
}
}
for(int i=m; i<n; i++)
{
if(j==1)
{
if(s[i]=='0')
{
j=1;
s[i]='9';
}
else
{
j=0;
s[i]--;
}
}
x[i]=s[i];
}
int len=strlen(x);
for(int i=len-1; i>=0; i--)
{
if(x[i]!='0') break;
x[i]=0;
}
len=strlen(x);
memset(s,0,sizeof(s));
for(int i=0; i<len; i++)
s[i]=x[i];
//printf("%s\n",s);
}
void get()
{
ans.clear();
int n=strlen(s),k,m;
while(n!=0)
{
string tmp="";
memset(t,0,sizeof(t));
int f=0;
for(int i=0; i<n-1; i++)
{
if(s[i]!='0')
{
f=1;
break;
}
}
if(f==0&&s[n-1]=='1'&&n!=1)
{
for(int i=0; i<n-1; i++)
t[i]='9';
}
else
{
f=1;
k=n/2;
for(int i=0; i<k; i++)
t[i]=t[n-1-i]=s[n-1-i];
if(n%2==1) t[k]=s[k];
int j;
for( j=k-1;j>=0;j--)
{
if(s[j]>s[n-1-j]) break;
if(s[j]<s[n-1-j]) {f=0;break;}
}
if(!f)
{
if(n%2==1&&t[k]!='0')
{
t[k]--;
}
else
{
f=0;
for(int i=k-1;i>j;i--)
{
if(t[i]>'0')
{
t[i]--;
t[n-1-i]--;
f=1;
break;
}
}
if(f==0)
{
t[j]--;
t[n-1-j]--;
//printf("%c %c\n",t[j],s[n-1-j]);
}
}
}
}
m=strlen(t);
for(int i=m-1; i>=0; i--)
{
tmp+=t[i];
}
sub();
n=strlen(s);
ans.push_back(tmp);
//n=0;
//printf("%s %s\n",s,t);
}
}
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int _;
scanf("%d",&_);
for(int k=1; k<=_; k++)
{
scanf("%s",t);
int n=strlen(t);
memset(s,0,sizeof(s));
for(int i=0; i<n; i++)
{
s[n-i-1]=t[i];
}
get();
printf("Case #%d:\n",k);
printf("%d\n",ans.size());
for(int i=0; i<ans.size(); i++)
{
cout<<ans[i]<<endl;
}
}
return 0;
}
相關推薦
hdu5920 Ugly Problem【貪心+高精度減法】
/* *********************************************** Author :Maltub Email :[email protected] Blog :htttp
【C++高精度演算法】
前言:由於計算機運算是有模運算,資料範圍的表示有一定限制,如整型int(C++中int 與long相同)表達範圍是(-2^31~2^31-1),unsigned long(無符號整數)是(0~2^32-1),都約為幾十億.如果採用實數型,則能儲存最大的double只能提供
【高精度 JAVA】HDU 5920 Ugly Problem
cti == tin ati pri 包裝類 out class gin 題意 給你一個數字n(n < 10^1000),將其拆成若幹個回文串(不超過50個)輸出拆分方案 分析 不難想到,我們可以每次給n減一個小於他的最大的回文串,這樣能夠盡量構造出最少數量的回文串,
洛谷【2142】高精度減法
set put 否則 max can 復雜 比較 uri gnu 題目傳送門:https://www.luogu.org/problemnew/show/P2142 高精度減法板子題,回憶一下小學列豎式打草稿的過程即可。 時間復雜度:\(O(len)\) 空間復雜度:\(O
貪心+高精度【洛谷P1080】
此篇文章的程式碼來自@Chlience,未經允許私自借用,十分不好意思。 題目連結:https://www.luogu.org/problemnew/show/P1080 拿到這個題目,我根本沒有注意到資料範圍竟然會超long long,真的是第一次做這種貪心題竟然需要寫高
P2142 高精度減法
兩個 輸出 blog 輸入輸出 輸入輸出格式 tin 負數 col spa 題目描述 高精度減法 輸入輸出格式 輸入格式: 兩個整數a,b(第二個可能比第一個大) 輸出格式: 結果(是負數要輸出負號) 輸入輸
【高精度乘法】NOIP2003麥森數
bottom clas map 復制 題目 radi 最大的 bit while 題目描述 形如2^{P}-12P?1的素數稱為麥森數,這時PP一定也是個素數。但反過來不一定,即如果PP是個素數,2^{P}-12P?1不一定也是素數。到1998年底,人們已找到了37個麥森數
51nod 1873 初中的算術【Java BigDecimal/高精度小數】
mes quest mathjax html value tex con question i++ 1873 初中的算術 基準時間限制:1 秒 空間限制:131072 KB 分值: 10 難度:2級算法題 收藏 關註 Noder現
高精度減法運算
col algorithm fin 比較 int 如果 轉換 put () eg:計算10002-99的差 ① #include "stdio.h" #include "string.h" #include "algorithm" #define N 3005 using
新疆大學ACM-ICPC程序設計競賽五月月賽(同步賽)F 猴子排序的期望【Java/高精度/組合數學+概率論】
keyset 競賽 turn ext ID return 組合數學 AS vid 鏈接:https://www.nowcoder.com/acm/contest/116/F 來源:牛客網 題目描述 我們知道有一種神奇的排序方法叫做猴子排序,就是把待排序的數字寫在卡片上,
高精度減法
mes reg gis () 。。 urn ash style i++ 敲代碼要敲瘋了!! 不怕難,就怕煩。。。 好了,很晚了,明天就開學了 22:30 //高精度減法——Crazily #include<bits/stdc++.
『NOIP 2012』國王遊戲 (貪心 + 高精度)
.org include tchar memcpy 分別是 esp span 得獎 str 國王遊戲 題目描述 恰逢 \(H\) 國國慶,國王邀請 \(n\) 位大臣來玩一個有獎遊戲。首先,他讓每個大臣在左、右手上面分別寫下一個整數,國王自己也在左、右手上各寫一個整數。然後
高精度減法模板
#include <iostream> #include <cstdio> #include <cstring> using namespace std; const int maxn = 1000; char s1[maxn], s2[maxn], s3[ma
【DP+高精度+壓位+容斥】【SHOI2009 舞會】
題目描述 OItown要舉辦了一年一度的超級舞會了,作為主辦方的Constantine為了使今年的舞會規模空前,他邀請了許多他的好友和同學去。舞會那天,恰好來了n個男生n個女生。Constantine發現,一般情況下,舞伴之間,總是男伴總是比女伴長得高,不過,偶爾也是有特殊情況的。所以,Cons
[NOIp2012] 國王遊戲(排序 + 貪心 + 高精度)
題意 給你兩個長為 \(n+1\) 的陣列 \(a,b\) ,你需要定義一個順序 \(p\) (\(p_0\) 永遠為 \(0\)) 能夠最小化 \[ \max_{i=1}^{n} \frac{\prod_{j = 0}^{i} a_{p_j}}{b_{p_i}} \] \(1 \le n \le 1000,
C++高精度演算法之高精度減法
高精度減法 題目描述 高精度減法 輸入 兩個整數a,b(第二個可能比第一個大) 輸出 結果(是負數要輸出負號) 樣例輸入 2 1 樣例輸出 1 說明 20%資料a,b
【高精度演算法】A/B 高精度除以低精度 保留小數
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> cha
C++ 高精度加法 高精度減法 高精度乘法1
轉自:http://blog.sina.com.cn/s/blog_4fdb102b010087ng.html 前言:由於計算機運算是有模運算,資料範圍的表示有一定限制,如整型int(C++中int 與long相同)表達範圍是(-2^31~2^31-1),unsigned
高精度減法-洛谷 2142
題目描述 高精度減法 輸入輸出格式 輸入格式: 兩個數(第二個可能比第一個大) 輸出格式: 結果(是負數要輸出負號) 輸入輸出樣例 樣例1輸入: 2 1 樣例一輸出: 1 題解: 按老師教過的高精度減法的方法做就行了。 程式碼: const m
jzoj3058-火炬手【高精度,暴力】
正題 題目大意 對於一個 n n n,求一個