I - Ugly Problem HDU-5920
2017-10-16 21:46
309 查看
I - Ugly Problem
HDU - 5920题意:
有一个大数,长度不超过1000,现在需要分解它,并且分解出来的数字都是回文数字,求出每一个分解 的个数和每一个分解的的数字。要求个数不能超过50.
题意:
此类题需要思维发散,向回文串的思路走的话会想到先找出一半,然后复制另一半,得到的数字必然是回文串,并且尽可能的大,当然会遇到此回文串比原串 大,即应该将左边的一半减一再还原,存储答案更新原串即可。
思路很清晰但是实现起来很容易写错,对于字符串的下标和对于奇偶性的处理需要好好把握,最好是先演算。
#include <iostream> #include <cstdio> #include <vector> #include <cstring> using namespace std; const int maxn = 2000; const int N = 2000; char s[maxn]; vector<string>ans; void sub(char *s,char *s1) { int num1[maxn] = {0},num2[maxn] = {0}; int lens = strlen(s),lens1 = strlen(s1); for(int i = 0;i < lens; i++) { num1[i] = s[i] - '0'; } for(int i = 0;i < lens1; i++) { num2[i] = s1[i] - '0'; } for(int i = lens-1,j = lens1-1;i >= 0 && j >= 0; --i,--j) num1[i] -= num2[j]; for(int i = lens-1;i >= 0; i--) { if(num1[i] < 0) { num1[i] += 10; num1[i-1]--; } } bool flag = true; for(int i = 0;i < lens && flag; i++) { if(num1[i]) { for(int j = 0;i + j <= lens; j++) { s[j] = num1[i+j] + '0'; if(i+j == lens) s[j] = '\0'; } flag = false; } } if(flag) strcpy(s,"0"); } int main() { //freopen("in.txt","r",stdin); int ncase = 1; int tt; scanf("%d",&tt); while(tt--) { ans.clear(); scanf("%s",s); printf("Case #%d:\n",ncase++); while(true) { int len1 = strlen(s); char s1[maxn] = {0}; for(int i = 0;i < (len1+1)/2; i++) s1[i] = s[i]; for(int i = 0,j = len1-1;i < (len1)/2; i++,j--) { s1[j] = s1[i]; } s1[len1] = '\0'; int temp = strcmp(s1,s); if(temp == 0) { ans.push_back(s); break; } else if(temp < 0) { ans.push_back(s1); sub(s,s1); } else { char s3[10] = "1"; for(int i = 0;i < (len1+1)/2; i++) s1[i] = s[i]; s1[(len1+1)/2] = '\0'; sub(s1,s3); int len2 = strlen(s1),len3; if(len1%2 == 0) len3 = len2-1; else len3 = len2-2; for(int i = len3,j = len2;i >= 0; i--,j++) { s1[j] = s1[i],s1[j+1] = '\0'; } ans.push_back(s1); sub(s,s1); } } printf("%d\n",ans.size()); for(int i = 0;i < ans.size(); i++) { cout<<ans[i]<<endl; } } return 0; }
相关文章推荐
- HDU 5920 Ugly Problem CCPC长春赛区 贪心
- Ugly Problem HDU - 5920 模拟+贪心。。
- HDU Ugly Problem 2016中国大学生程序设计竞赛(长春)-重现赛
- Interesting Housing Problem hdu 2426 KM模板 +二分图最佳匹配
- HDOJ HDU 1022 Train Problem I
- hdu 1016 Prime Ring Problem
- hdu 1000 A + B Problem(Java)
- HDU 5572 An Easy Physics Problem【计算几何】
- hdu 4627 The Unsolvable Problem(暴力的搜索)
- hdu 1002 A + B Problem II(大正整数相加)
- HDU 1022 Train Problem I 【栈】
- HDU-3666 THE MATRIX PROBLEM
- HDU Problem r
- 【HDU】4729 An Easy Problem for Elfness 可持久化线段树——主席树
- HDU 5832 A water problem (大数取模)
- HDU 5920 Ugly Problem(模拟)
- Problem E:Monkey and Banana(HDU 1069)
- HDU 5323 SOLVE THIS INTERESTING PROBLEM 爆搜
- [ACM] hdu You can Solve a Geometry Problem too (线段是否相交及交点个数)
- HDU 1086 You can Solve a Geometry Problem too(规范相交模版)