1. 程式人生 > >hdu5920 Ugly Problem【貪心+高精度減法】

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只能提供

精度 JAVAHDU 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,求一個