UVA 232 Crossword Answers

来源:互联网 发布:计算面积的软件 编辑:程序博客网 时间:2024/06/16 19:27

题目描述

链接:https://odzkskevi.qnssl.com/963433dd82c52cf702fde21457b672c9?v=1508485620


题意,讲道理,我到现在也没看懂这一片英文,很尴尬,就在猜,隐约看到了从左往右,从上往下,以*或者到边界了,就算分割开,然后再猜他那个每一个字符串的标号怎么来的,竟然还有一样的,观察发现,如果在ij为起始点,那么如果横竖都有符合条件的他俩的标号都是一样的

My ugly code

#include <cstdio>#include <cmath>#include <iostream>#include <cstring>#include <string>#include <algorithm>#include <map>using namespace std;int r,c;char a[15][15];int b[15][15];int cas=1;int main(){    while(~scanf("%d",&r) && r){        scanf("%d",&c);        map<int,string> acr;        map<int,string> dow;        for(int i=1;i<=r;i++){            scanf("%s",a[i]+1);        }        memset(b,0,sizeof(b));        for(int i=1;i<=r;i++){            for(int j=1;j<=c;j++){                if(a[i][j]=='*'){                    b[i][j]=-1;                }            }        }        int cnt=1;        for(int i=1;i<=r;i++){            for(int j=1;j<=c;j++){                if(b[i][j]==-1)                    continue ;                int flag=0;                if(j-1 == 0 || b[i][j-1]==-1){                    int k=j;                    string s1="";                    flag=1;                    while(b[i][k]!=-1 && k <= c){                        s1+=a[i][k++];                    }                    s1+='\0';                    acr[cnt]=s1;                }                if(i-1 == 0 || b[i-1][j]==-1){                    int k=i;                    string s1="";                    flag=1;                    while(b[k][j]!=-1 && k <= r){                        s1+=a[k++][j];                    }                    s1+='\0';                    dow[cnt]=s1;                }                if(flag) cnt++;            }        }        if(cas > 1) printf("\n");        printf("puzzle #%d:\n",cas++);        printf("Across\n");        //printf("%d\n",acr.size());        map<int,string>::iterator itor;        for(itor=acr.begin();itor!=acr.end();itor++){            int ans1;            string ans2;            ans1=itor->first;            ans2=itor->second;            printf("%3d.%s\n",ans1,ans2.c_str());        }        printf("Down\n");        map<int,string>::iterator itor1;        for(itor1=dow.begin();itor1!=dow.end();itor1++){            int ans1=itor1->first;            string ans2=itor1->second;            printf("%3d.%s\n",ans1,ans2.c_str());        }    }    return 0;}




原创粉丝点击