HDU5920(字串模擬)

2021-07-23 09:47:52 字數 1042 閱讀 2092

題意:將乙個數字分成不超過50個回文數字,只要不超過50個就行,不一定要最小。

思路:一道算是比較簡單的題被我越搞越複雜。從中間開始向兩邊遍歷並逐位賦值給b,找到不對稱的地方時取較小的數,每次找到的b都是小於a的較大回文數字。如a = 123345,則第乙個回文數字b = 123321; a = 12223 , b = 12221,;a = 32221,b = 12221,具體見注釋吧。

#includeusing namespace std;

const int n = 1010;

char a[n],b[n],c[n],ans[n][n];

int main()

else

b[i] = b[len - 1 - i] = a[i];

}b[len] = 0;

//特判

if(!flag)//a已經是回文串

if(b[0] == '0')//特判

else//分成9+199..991,8 + 299..992,7 + 399..993等

if((len & 1) && (a[len >> 1] != '0'))//奇數字中間位置可能不為0,需要再次計算

break;

}// 獲取c,c = a - b

int t4 = 0;

for(int i = len - 1; i >= 0; i--)

c[len] = 0;

//清除c的前導零

int t5;

for(int i = 0; i < len; i++)

}strcpy(ans[num++],b);

strcpy(a,c + t5);//將c賦值給a繼續下一次迴圈

len = strlen(a);

}printf("case #%d:\n",cas++);

printf("%d\n",num);

for(int i = 0; i < num; i++)

printf("%s\n",ans[i]);

}return 0;

}

915 字串 貪心 模擬

時間限制 1000 ms 記憶體限制 65535 kb 難度 1 描述 shiva得到了兩個只有加號和減號的字串,字串長度相同。shiva一次可以把乙個加號和它相鄰的減號交換。他想知道最少需要多少次操作才能把第乙個字串變換成第二個字串。你現在要去幫助他完成那個這個問題。輸入多組測試資料 每組資料有兩...

2014 09 3 字串匹配(模擬,字串處理)

給出乙個字串和多行文字,在這些文字中找到字串出現的那些行。你的程式還需支援大小寫敏感選項 當選項開啟時,表示同乙個字母的大寫和小寫看作不同的字元 當選項關閉時,表示同乙個字母的大寫和小寫看作相同的字元。輸入格式 輸入的第一行包含乙個字串 s,由大小寫英文本母組成。第二行包含乙個數字,表示大小寫敏感的...

hdu2920 字串雜湊

模式串中 把它分成一截截,當某一截在s串中多個位置能找到匹配,找第乙個匹配點,貪心 因為當中間有 可以利用它跳過一些字元,當遇到 先跳過乙個字元,其他的一截截貪心去找到匹配位置,若最後剩餘偶數個字元,則match 第一截和最後一截如果是非 和 必須嚴格匹配 找來的雜湊寫法 include inclu...