poj1035 Spell checker
2012-08-06 17:03
417 查看
本来就是简单的字符串问题,模拟比较一下就可以,结果因为一个标志位写错调试了20多分钟。。。
code
code
#include <set> #include <map> #include <ctime> #include <queue> #include <cmath> #include <stack> #include <limits> #include <vector> #include <bitset> #include <string> #include <cstdio> #include <cstring> #include <fstream> #include <string.h> #include <iostream> #include <algorithm> #define ls rt<<1 #define rs rt<<1|1 #define Si set<int> #define LL long long #define pb push_back #define PS printf(" ") #define Vi vector<int> #define LN printf("\n") #define SD(a) scanf("%d",&a) #define PD(a) printf("%d",a) #define SET(a,b) memset(a,b,sizeof(a)) #define FF(i,a) for(int i(0);i<(a);i++) #define FD(i,a) for(int i(a);i>=(1);i--) #define FOR(i,a,b) for(int i(a);i<=(b);i++) #define FOD(i,a,b) for(int i(a);i>=(b);i--) #define readf freopen("input.txt","r",stdin) #define writef freopen("output.txt","w",stdout) const int maxn = 10001; const int INF = 0x3fffffff; const int dx[]={0,1,0,-1}; const int dy[]={1,0,-1,0}; const double pi = acos(-1.0); using namespace std; char dict[10001][16]; char check[51][16]; int dlen[10001],clen[51]; int path[10001]; bool replace(int cn,int dn){ int cnt=0; FF(i,dlen[dn]){ if(check[cn][i]!=dict[dn][i]) cnt++; if(cnt>1) return false; } return true; } bool del(int cn,int dn){ int i,j,cnt; i=j=cnt=0; while(j<dlen[dn]){ if(check[cn][i]!=dict[dn][j]){ i++; cnt++; if(cnt>1) return false; }else{ i++; j++; } } return true; } bool insert(int cn,int dn){ int i,j,cnt; i=j=cnt=0; //printf("clen %d\n",clen[cn]); while(i<clen[cn]){ //printf(" %c %c \n",check[cn][i],dict[dn][j]); if(check[cn][i]!=dict[dn][j]){ j++;cnt++; //PD(cnt);LN; if(cnt>1) return false; }else{ i++; j++; } } return true; } int main(){ //readf; char tmp[16]; int N=0,M=0; while(~scanf("%s",tmp)&&tmp[0]!='#'){ strcpy(dict[++N],tmp); } while(~scanf("%s",tmp)&&tmp[0]!='#'){ strcpy(check[++M],tmp); } FOR(i,1,N) dlen[i]=strlen(dict[i]); FOR(i,1,M) clen[i]=strlen(check[i]); //printf("%d\n",insert(3,6)); int pos=0; FOR(i,1,M){ bool flag=false; pos=0; FOR(j,1,N){ if(clen[i]==dlen[j]){ if(!strcmp(check[i],dict[j])){ flag=true; break; }else{ if(replace(i,j)) path[++pos]=j; } } if(clen[i]+1==dlen[j]){ if(insert(i,j)) path[++pos]=j; } if(clen[i]==dlen[j]+1){ if(del(i,j)) path[++pos]=j; } } if(flag) printf("%s is correct\n",check[i]); else{ printf("%s:",check[i]); FOR(j,1,pos){ printf(" %s",dict[path[j]]); } LN; } } return 0; }
相关文章推荐
- poj1035 Spell checker
- Poj 1035 Spell checker
- [POJ_1035]Spell checker
- poj 1035 Spell checker
- poj 1035 Spell checker
- poj 1035 Spell checker
- poj 1035 Spell checker
- POJ 1035 Spell checker
- POJ 1035, Spell checker
- POJ 1035 Spell checker
- POJ 1035 Spell checker
- poj 1035 Spell checker
- poj 1035 Spell checker
- poj 1035 Spell checker
- poj 1035 Spell checker
- poj 1035 Spell checker
- POJ 1035 Spell checker
- POJ 1035 Spell checker
- poj 1035 Spell checker
- POJ 1035 Spell checker