习题3-11 换抵挡装置 UVa1588
来源:互联网 发布:怎么创建数据库sql语句 编辑:程序博客网 时间:2024/06/15 18:02
习题3-11 换抵挡装置 UVa1588
感悟。
1、上网站下载英文原题,仔细阅读。
2、持续的移动咬合想不清时,可以考虑分段的移动咬合,等能力强劲后可以考虑是否能一次性解决。
3、移动的长条选小的,不动的选长度长的长条,左边右边都添加小的长条空间。
4、思路比较简单,但编写比较困难,尤其是分段函数接壤部分的处理。
5、找分段函数的通式上费了老鼻子劲,最后还是靠采用121 12 ==》0012100 12 现场掰手指头的方式来找数学公式,效果还不错 。
6、提交又一次就AC啦,此类程序难在通过测试样例。
7、对整型逻辑变量,若要设置时设置为0,还是1呢,实践证明,真的时候设置1比0管用,真的时候设置0容易造成逻辑混乱。
8、至此第三章编码结束,很高兴,虽然书本进度推进到60页,但水平真是长进了不少啊。同样是学1+1=2,认识得更加的深入。
附上代码
环境Dev-cpp4.9.9.2
#include <stdio.h>
#include <string.h>
char smin[1000];
char smax[1000];
char stemp[1000];
int book[1000];
int main(){
int sminlen,smaxlen,tlen;
int i,j;
while(scanf("%s%s",smin,smax)!=EOF){
sminlen=strlen(smin);
smaxlen=strlen(smax);
if(sminlen>smaxlen){//交换,处理成真正的smin,smax;
tlen=sminlen;
sminlen=smaxlen;
smaxlen=tlen;
strcpy(stemp,smin);
strcpy(smin,smax);
strcpy(smax,stemp);
}
for(i=0;i<sminlen;i++){//左边sminlen长度的字符'0'串
stemp[i]='0';
}
for(i=sminlen;i<sminlen+smaxlen;i++){//中间,串smax
stemp[i]=smax[i-sminlen];//注意smax[i-sminlen]容易写错
}
for(i=sminlen+smaxlen;i<sminlen+smaxlen+sminlen;i++){//右边sminlen长度的字符'0'串
stemp[i]='0';
}
stemp[sminlen+smaxlen+sminlen]='\0';//字符串结束标志
memset(book,0,sizeof(book));//全都不成功
//扫描这段是分段函数,很昏,采用121 12 ==》0012100 12 现场掰手指头的方式来找数学公式,效果还不错
for(i=0;i<=sminlen-1;i++){//smin在左侧移动,未被smax完全遮挡
for(j=0;j<sminlen;j++){
if(stemp[i+j]-'0'+smin[j]-'0'==4){//咬合不成功
break;
}
}
if(j==sminlen)//成功book[i]=1; j==sminlen而不是j=sminlen奇怪,怎么这么容易写错
book[sminlen+smaxlen-1-i]=1;
}
for(i=sminlen;i<=smaxlen;i++){//smin在中间移动,完全被smax遮挡
for(j=0;j<sminlen;j++){
if(stemp[i+j]-'0'+smin[j]-'0'==4){//咬合不成功
break;
}
}
if(j==sminlen){//之前竟然将==写成=
book[smaxlen-1]=1;
}
}
for(i=smaxlen+1;i<=sminlen+smaxlen;i++){//smin在右侧移动,未被smax完全遮挡
for(j=0;j<sminlen;j++){
if(stemp[i+j]-'0'+smin[j]-'0'==4){//咬合不成功
break;
}
}
if(j==sminlen)
book[smaxlen+i-smaxlen-1]=1;
}
for(i=smaxlen-1;i<sminlen+smaxlen;i++){//打印总长度,注意i的起始位置不是0而是smaxlen-1
if(book[i]==1){
printf("%d\n",i+1);
break;
}
}
}
return 0;
}
- 习题3-11 换抵挡装置 UVa1588
- 习题3-11 换低挡装置 UVa1588
- 算法竞赛入门经典(第二版) 习题3-11 换低档装置(Kickdown) UVa1588 NEERC2006
- uva1588换低档装置Kickdown
- Uva 1588 换抵挡装置
- 习题3-11 换低档装置
- 算法竞赛入门经典(第2版)习题3-11 换低挡装置 Kickdown UVa1588
- 《算法竞赛入门经典2ndEdition 》习题3-11 换低挡装置(Kickdown, Uva1588)
- 习题3-11 换低挡装置(Kickdown, ACM/ICPC NEERC 2006, UVa1588)
- 习题3-11 UVa1588 Kickdown
- UVa 1588 Kickdown(换抵挡装置)
- UVa1588--Kickdown--换低挡装置
- Uva1588
- UVa1588
- 抵挡
- [刷题]算法竞赛入门经典 3-10/UVa1587 3-11/UVa1588
- 换低档装置(uva-1588)
- UVa 1588 Kickdown (换低档装置)
- POJ2823 sliding window 优先队列
- 树的子结构
- HDU 1208
- poj 3261 Milk Patterns(后缀数组)
- 可变参数列表与枚举介绍
- 习题3-11 换抵挡装置 UVa1588
- hibernat异常:Unable to get the default Bean Validation factory
- bzoj2127(还没过+最小割)
- Opencv图像识别从零到精通(19)----Robert,prewitt,Sobel边缘检测
- JavaScript初探
- Size Balanced Tree Sbt模板
- Fedora系统之打开终端快捷键设置
- 父结点、子结点、兄弟结点
- HiHoCoder_#1175 : 拓扑排序·二