UVa 1588 - Kickdown(BUG)

举报
小哈里 发表于 2022/05/11 01:30:39 2022/05/11
【摘要】 //UVa 1588 - Kickdown//一次循环,分类讨论//有BUG,,,不要看了,,仅供收藏。。。欢迎大神提出意见。。。#include<stdio.h>int main(){ freopen("x3.11.in","r",stdin); //freopen("x3.11.out","w",stdout);/...

  
  1. //UVa 1588 - Kickdown
  2. //一次循环,分类讨论
  3. //有BUG,,,不要看了,,仅供收藏。。。欢迎大神提出意见。。。
  4. #include<stdio.h>
  5. int main(){
  6. freopen("x3.11.in","r",stdin);
  7. //freopen("x3.11.out","w",stdout);
  8. //DATE IN
  9. char ch, must = 1; //ch为临时输入,must处理掩码得到0101
  10. bool a[2][100]; //用于存放每次的2组数据
  11. int count = 0, is = 0, lo[2],ca = 0; //count记录字符串长度并用lo[]存储,ca为答案个数
  12. while((ch = getchar()) != EOF){
  13. if(ch == '\n'){
  14. lo[is++] = count;
  15. putchar('\n');
  16. //printf("size:%d\n",lo[is-1]);
  17. count = 0;
  18. }else {
  19. if(ch == ' ')continue;
  20. else{
  21. a[is][count] = !(ch & must);
  22. printf("%d ",a[is][count]);
  23. count++;
  24. }
  25. }
  26. //DATE DO(此处计算并输出答案,并在最后重置is)
  27. if(is == 2){
  28. int re , m = 0, iss = 0,i = lo[0];
  29. //re 为重复,m向右移,iss 为开关,第i次
  30. while(1){
  31. if(i > 0)i--;else m++;
  32. for(int j = 0; ; j++){
  33. if(!m && (a[0][i+j]+a[1][j+m])==2)break;
  34. if(!m && (i+j)==(lo[0]-1)){re = j+1;break;}
  35. if(!i && j==(lo[0]-1)){re = lo[0];break;}
  36. if(!i && (j+m+1)==lo[1]){re >= lo[1]?iss=1:re = lo[1]-m;break;}
  37. if(!i && m==lo[1]){re = 0;break;}
  38. }
  39. if(re==lo[0] || re==lo[1] || iss==1 || re == 0){
  40. printf("case%d:%d\n",++ca,lo[0]+lo[1]-re);
  41. break;
  42. }
  43. }
  44. //continue
  45. is = 0;
  46. }
  47. }
  48. return 0;
  49. }
  50. /*
  51. UVa1588测试数据
  52. case1:10
  53. case2:4
  54. case3:7
  55. case4:8
  56. case5:10
  57. case6:8
  58. case7:15
  59. case8:
  60. */


以下为测试数据:

3.11.in

2 2 1 2 1 1 2
2 1 1 2 1 1 2 1 1 2
2 2
2 1 1 2
2 2 2 1
2 2 2 1
2 2 2 2
2 1 1 1 1 2
2 1 1 2 1 1 2 1 1 2
2212112
1 2 1 2 1 2 1 2
2 1 2 1 2 1 2 1 
2 2 1 1 2 2 1 1 2 2 
2 1 2 1 2


  
  1. //AC1
  2. #include<stdio.h>
  3. #include<string.h>
  4. const int maxn=100;
  5. char a[maxn+1],b[maxn+1];
  6. int n1,n2;
  7. int min(const int &i,const int &j){
  8. return i<j?i:j;
  9. }
  10. int minLen(char *s1,char *s2,int &n){
  11. int sumLen=n1+n2, minn=min(n1,n2), len=sumLen;
  12. for(int i = 0; i < n; i++){
  13. int ok = 1, fix = min(n-i,minn);
  14. for(int j=0; j < fix; j++)
  15. if(s1[i+j]=='2'&&s2[j]=='2'){
  16. ok=0; break;
  17. }
  18. if(ok&&len>sumLen-fix)len=sumLen-fix;
  19. }
  20. return len;
  21. }
  22. int main(){
  23. while(scanf("%s%s",&a,&b)==2){
  24. n1=strlen(a),n2=strlen(b);
  25. printf("%d\n",min(minLen(a,b,n1),minLen(b,a,n2)));
  26. }
  27. }


  
  1. //AC2
  2. #include<stdio.h>
  3. #include<string.h>
  4. char a[110],b[110];
  5. int main(){
  6. while(scanf("%s%s",a,b) != EOF){
  7. int i,j,t,n1,n2;
  8. int temp,len1,len2;
  9. i=j=t=0;
  10. n1=strlen(a);
  11. n2=strlen(b);
  12. //
  13. while(j<n1 && i<n2){
  14. if(a[j]+b[i]-96<=3)i++,j++;
  15. else t++,i=0,j=t;
  16. }
  17. len1=n1+n2-i;
  18. i=j=t=0;
  19. //
  20. while(j<n2&&i<n1){
  21. if(a[j]+b[i]-96<=3)i++,j++;
  22. else t++,i=0,j=t;
  23. }
  24. len2=n1+n2-i;
  25. printf("%d\n",len1 < len2 ? len1 : len2 );
  26. }
  27. return 0;
  28. }

2212112
2112112112
22
2112
2221
2221
2222
211112
2112112112
2212112
12121212
21212121
2211221122
21212



文章来源: gwj1314.blog.csdn.net,作者:小哈里,版权归原作者所有,如需转载,请联系作者。

原文链接:gwj1314.blog.csdn.net/article/details/54744459

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。