swjtu oj 1589 Help Alice!
来源:互联网 发布:sql delete加标记 编辑:程序博客网 时间:2024/06/14 10:49
http://acm.swjtu.edu.cn/JudgeOnline/showproblem?problem_id=1589
没涉及到什么算法,两个二进制数,求最大公约数,但是这两个数字必须用字符串表示,算是要求自己模板吧,这里给出我AC的程序:二进制字符串的减法和取模运算.
#include <stdio.h>#include <string>typedef struct { char s[202]; }answer; answer OPT[201][21]; //OPT[i][j],??s????????i????????????j??????????????????????char *plus(char *a , char *b,int p,int i) { char s[250],sum[250]; int k=0; for(k=0;p+k<=i;k++) s[k]=b[p+k]; sum[0]='0'; int la=strlen(a); int length=la>k?la:k; int min=la<k?la:k; int sign=0,m; length+=1; for(m=0;m<min;m++){ sum[length-m-1]=a[la-m-1]+s[k-m-1]+sign-'0'; if(sum[length-m-1]>'9') {sum[length-m-1]-=10;sign=1;} else sign=0; } while(m<la) {sum[length-m-1]=a[la-m-1]+sign; if(sum[length-m-1]>'9') {sum[length-m-1]-=10;sign=1;} else sign=0;m++;} while(m<k) {sum[length-m-1]=s[k-m-1]+sign; if(sum[length-m-1]>'9') {sum[length-m-1]-=10;sign=1;} else sign=0;m++;} if(sum[0]=='0'&&sign==1) sum[0]='1'; sum[length]='\0'; if(sum[0]=='0') return sum+1; else return sum; }void fun(char *s,int m); int aSmaller(char *a,char *b){ int la,lb; la=strlen(a); lb=strlen(b); if(la<lb) return 1; else if(la>lb) return 0; else { int i; for(i=0;i<la;i++) if(a[i]<b[i]) return 1; else if(a[i]>b[i]) return 0; } return 0; } char *plus(char *a , char *b,int p,int i);int main() { int n; scanf("%d",&n); while(n--) { char s[201]; int m; scanf("%s%d",s,&m); fun(s,m); } return 0; } void get(char *a,char *s,int i) { int j=0; for(j=0;j<i;j++) a[j]=s[j]; a[j]='\0'; } void fun(char *s,int m) { int ls=strlen(s); int j,i; for(j=0;j<=m;j++) strcpy(OPT[0][j].s,"0"); for(i=0;i<=ls;i++) get(OPT[i][0].s,s,i); strcpy(OPT[0][0].s,"0"); for(i=1;i<=ls;i++) for(j=1;j<=m;j++) { if(j>=i) {strcpy(OPT[i][j].s,OPT[i][j-1].s);continue;} char min[250]; char sum[250]; strcpy(sum,plus(OPT[i-1][j-1].s,s,i-1,i-1)); strcpy(min,sum); int p; for(p=i-2;p>=0;p--) { strcpy(sum,plus(OPT[p][j-1].s,s,p+1-1,i-1)); if(aSmaller(sum,min)) strcpy(min,sum); } strcpy(OPT[i][j].s,min); }printf("%s\n",OPT[ls].s); }
- swjtu oj 1589 Help Alice!
- swjtu oj 1737
- swjtu oj 1579 加号问题
- swjtu-oj 1569 离线并查集
- SWJTU oj Short Problem(异或求和)
- SWJTU oj 2387 Magic Maze(DAG 求最长路)
- SWJTU OJ 西安交通大学第十三届ACM程序设计决赛-题解
- Light OJ 1197 - Help Hanzo
- Light oj 1197 - Help Hanzo
- light oj 1197 Help Hanzo
- virtual oj ACboy needs your help again!
- Help Hanzo light OJ 1197 “素数筛”
- XTU OJ 1168 Alice and Bob (二维dp)
- lonlife oj 1029 - Bob and Alice are playing factors
- Light OJ 1327 Help the Winners (状压DP)
- 哈理工OJ 2291 Help C5(分形题目)
- help
- Help
- swjtu oj 1579 加号问题
- android开发常用命令
- C语言经典算法:如何较快的分解质因数
- android 2.3 电源管理
- 小心strncpy!
- swjtu oj 1589 Help Alice!
- 非递减顺序表的合并
- ,函数调用问题
- android 2.3 电量管理
- Android自动化测试初探: 模拟键盘鼠标事件(Socket+Instrumentation实现)
- pku 2823 双端队列
- C语言面试题大汇总之华为面试题
- hdu 1022
- android 2.3 wifi (一)