1. 程式人生 > >hdu5920(字串模擬)

hdu5920(字串模擬)

Ugly Problem

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 1159    Accepted Submission(s): 409
Special Judge


Problem Description Everyone hates ugly problems.

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.
Input In the first line of input, there is an integer T denoting the number of test cases.

For each test case, there is only one line describing the given integer s (1
s101000
).
Output For 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

題意:給定一個數字,找出一個或幾個迴文數字,使得這幾個迴文數字之和剛好等於給出的數字。迴文數字的數量不大於50!!!

字串長度len無論奇偶,i與len-1-i都是左右對稱的這點很受用

/*
思路:從中間開始向兩邊遍歷並逐位賦值給b,找到不對稱的地方時取較小的數,
每次找到的b都是小於a的較大回文數字,然後更新a,直到a的長度為1 
*/
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
const int N = 1010;  
char a[N],b[N],c[N],ans[N][N]; 
int len,num;
int main()
{
	int t;
	cin>>t;
	for(int k=1;k<=t;k++)
	{
		cin>>a;     //條件數字輸入 
		len=strlen(a);
		num=0;
		while(len>=1)
		{
			bool flag=0;
			b[len>>1]=a[len>>1];     //為奇數長度服務,因為在迴圈中奇數長度的中間字元沒有包含 
			for(int i=len/2-1;i>=0;i--)               //用這種方法可以很好的一起處理len為奇數或偶數的情況 
			{
				if(a[i]!=a[len-1-i]&&!flag)    //找到首個兩邊不相等的字元,並取小的 
				{
					flag=1;
					b[i]=b[len-1-i]=a[i]<a[len-1-i]?a[i]:a[len-1-i];
				}
				else                                //因為對輸出迴文數字的個數有要求所以要使得這些迴文數字儘可能大但是又不能比給定數字a大 
					b[i]=b[len-1-i]=a[i];
			}
			b[len]=0;
			if(!flag)      //如果本身已經是個迴文數字就退出while迴圈準備輸出 
			{
				strcpy(ans[num++],a);
				break;
			}
			if(b[0]=='0')        //特殊情況,b有前導0 
			{
				if(a[0]=='1')    //把a拆分為1,9999…9,還有餘下部分 
				{
					strcpy(ans[num++],"1\0");
					for(int i=0;i<len-1;i++)
						ans[num][i]='9';
					ans[num++][len-1]=0;
				}
				else        //根據a[0]不同把a拆分為8,2999…92,餘下部分  或7,3999…93,餘下部分   或…… 
				{
					int m=a[0]-'0';
					ans[num][0]=(char)(11-m+'0');
					ans[num++][1]=0;
					ans[num][0]=ans[num][len-1]=(char)(a[0]-1);
					for(int i=1;i<len-1;i++)
						ans[num][i]='9';
					ans[num++][len]=0;
				}
				b[0]=a[0];
				for(int i=1;i<len;i++)b[i]='0';
				b[len]=0;
			}           //沒有前導0,直接把b放到結果串中 
			else
			{
				strcpy(ans[num++],b);
			}
			//獲取c=a-b  並消除前導0存入a 
			bool jw=false;
			int ta,tb,n;
			for(int i=len-1;i>=0;i--)
			{
				ta=a[i]-'0';
				tb=b[i]-'0';
				n=(10+a[i]-b[i]-jw)%10;
				c[i]=n+'0';
				jw=(a[i]-b[i]-jw)<0;
			}
			c[len]=0;
			int tc=0;
			while(c[tc]=='0')tc++;
			strcpy(a,c+tc);
			len=strlen(a);
		}
		printf("Case #%d:\n%d\n",k,num);
		for(int i=0;i<num;i++)cout<<ans[i]<<endl;
	}
}


相關推薦

hdu5920字串模擬

Ugly Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 1159    Accepted

hdu2074疊筐解題報告---圖形列印字串模擬

                                          &

CCF 201803-3 URL對映字串模擬

  URL 對映是諸如 Django、Ruby on Rails 等網頁框架 (web frameworks) 的一個重要元件。對於從瀏覽器發來的 HTTP 請求,URL 對映模組會解析請求中的 URL 地址,並將其分派給相應的處理程式碼。現在,請你來實現一個簡單的 URL 對映功能。  本題中 URL 對映

5920- Ugly Problem 字串模擬&&思路

Everyone hates ugly problems.  You are given a positive integer. You must represent that number by sum of palindromic numbers.  A palindr

CSP之URL對映字串模擬,90分

 問題描述 試題編號: 201803-3 試題名稱: URL對映 時間限制: 1.0s 記憶體限制: 256.0MB 問題描述: 問題描述   URL 對映是諸如 Django、Ruby on Rails 等網頁

20181024字串模擬+three pointer+樹形DP

求導 (equation.cpp/c/pas) 【問題描述】 “看上去像⼏幾何問題,實際上是函式問題。” ⽯石神是⼀一位天才數學家。為了能夠將⾃自⼰己的研究進⾏行下去,選擇了在⼀一所⾼高中教書。在⼀一次數學測 驗中,⽯石神給學⽣生出了⼀一道簡單的求導題。題中保證

CodeForces 321A Ciel and Robot數學模擬

ont amp force 等於 return printf print -- 題意 題目鏈接:http://codeforces.com/problemset/problem/321/A 題意:在一個二維平面中,開始時在(0,0)點,目標點是(a。b),問能不能通過反

Codeforces 848B Rooter's Song分類+模擬

continue ++i begin printf oot log http define bool 題目鏈接 Rooter‘s Song 題意 有n個舞者站在x軸上或y軸上,每個人有不同的出發時間。x軸上的舞者垂直x軸正方向移動,y軸上的舞者垂直y軸正方向移動。 當

大魚吃小魚簡單模擬

一個 入棧 nco http spa println code tar pre 題目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1289 從左往右將數字壓入棧裏(想象成一個水平向右的棧),如果

刷題總結——mathNOIP模擬

情況 math temp for names namespace ios 個數 std 題目: 給定兩個數字n,求有多少個數字b滿足a^b和b^a同余於2^n,其中n<=30,a<=10^9, 題解: 挺巧妙的一道題··

刷題總結——做運動NOIP模擬

time 復雜度 bsp i++ top oid reg 第一次 現在 題目: 給定一個無向圖,節點數n<=50000,m<=1000000,每條邊有兩個值t和c,邊的長度為t*c···現在要求再t盡量小的情況下,

【UVA】1594 Ducci Sequence模擬

i++ mar freopen esp abs mat ret code == 題目 題目 ? ? 分析 真的快瘋了,中午交了一題WA了好久,最後發現最後一個數據不能加\n,於是這次學乖了,最後一組不輸出\n,於是WA了好幾發,最後從Udebug發現最後一組是要輸出的!!

淺談JavaScript的事件事件模擬

指定 事件 func edt 創建 over asset pat 鼠標   事件經常由操作或者通過瀏覽器功能觸發,通過JavaScript也可以觸發元素的事件。通過JavaScript觸發事件,也稱為事件的模擬。 DOM中事件模擬   可以document的create

Distances to Zero 思維+模擬

pac div style namespace strong sof 16px 宋體 題意 vj鏈接: https://vjudge.net/contest/235444#problem/B 題意: 求每個數到離它最近的0的距離,0到本身距離是0。 測試樣例: 輸入:

洛谷P3006 [USACO11JAN]瓶頸Bottleneck模擬

排序 ask push namespace 個數 貪心 祖先 nec ret 傳送門 感覺這題的思路還是挺不錯的。然而為啥全網就一個題解而且只有代碼……然後我只好看著代碼理解了好久…… 題意就是有一棵樹,每一

除錯經驗——使用自定義函式在Oracle中實現類似LISTAGG函式的行轉列字串連線功能

問題描述: LISTAGG函式是一個很實用的函式,但僅在Oracle 11.2以後的版本中才有。 生產環境中有個資料庫是Oracle 11.1,需要行轉列,但並不能使用LISTAGG函式。 解決方法: 參考以下文章: https://oracle-base.com/artic

JavaScript:三種簡便方法生成重複的字串字串乘法

  看到一個題目要求寫一個函式times,輸出str重複num次的字串。 比如str:bac     num:3 輸出:abcabcabc   除了利用迴圈還有幾種方法,我學習研究之後記下以下三種方法。 1. 遞迴,結合三元表示式更簡潔。 2.

HihoCoder-1559 合併子目錄模擬

題意 輸入 n n n 個檔案的絕對路徑,如果一個名為 xx x x xx 的目錄下只有一

HDOJ 1004 Let the Balloon Rise 字串+stl

題目: Problem Description Contest time again! How excited it is to see balloons floating around. But to tell you a secret, the judges' favorite tim

E - String of CCPC 字串處理str.substr()的運用)

滴答滴答---題目連結  BaoBao has just found a string  of length  consisting of 'C' and 'P' in his pocket. As a big fan of the China