468
技術社區[雲棲]
poj 1318 Word Amalgamation
這種字符串的題一定要仔細,不然很容易WA。。。
我開始的一種方法不是處理dictionary和sortDis,而是每次都搜索一次,到現在我都還沒找到為什麼錯了。。。
後一種代碼就是先處理dictionary和sortDis,之後就容易處理了
AC的代碼:
#include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> using namespace std; char dictionary[102][10]; //1~100詞,每個詞1~6字母 char sortDic[102][10]; //排序以後的字典 int dicNum; //字典中詞的個數 int main() { //freopen("test.txt","r",stdin); char tmp[7]; int i; //輸入字典,從下標0開始 ok for(i=0; ;i++) { scanf("%s",tmp); if(strcmp(tmp,"XXXXXX")==0) break; strcpy(dictionary[i],tmp); } dicNum=i; //處理dictionary和sortDic int j; for(i=0;i<dicNum;i++) for(j=0;j<dicNum;j++) if(strcmp(dictionary[i],dictionary[j])<0) { strcpy(tmp,dictionary[j]); strcpy(dictionary[j],dictionary[i]); strcpy(dictionary[i],tmp); }//字典順序已經排好 //test /*for(i=0;i<dicNum;i++) printf("%s\n",dictionary[i]);*/ for(i=0;i<dicNum;i++) //排sortDic { strcpy(sortDic[i],dictionary[i]); sort(sortDic[i],sortDic[i]+strlen(sortDic[i])); } //輸入待排序數 while(scanf("%s",tmp)) { if(strcmp(tmp,"XXXXXX")==0) return 0; sort(tmp,tmp+strlen(tmp)); int count=0; for(i=0;i<dicNum;i++) if(strcmp(tmp,sortDic[i])==0) //相等就標記一下 { printf("%s\n",dictionary[i]); count++; } if(count==0) { printf("NOT A VALID WORD\n"); printf("******\n"); continue; } printf("******\n"); } return 0; }
一直WA的代碼:
#include <stdio.h> #include <string.h> #include <iostream> #include <algorithm> using namespace std; char dictionary[102][7]; //1~100詞,每個詞1~6字母 char sortDic[102][7]; //排序以後的字典 int dicNum; //字典中詞的個數 int flag[102]; int main() { //freopen("test.txt","r",stdin); char tmp[7]; int i; //輸入字典,從下標1開始 ok for(i=1; ;i++) { scanf("%s",tmp); if(strcmp(tmp,"XXXXXX")==0) break; strcpy(dictionary[i],tmp); strcpy(sortDic[i],tmp); sort(sortDic[i],sortDic[i]+strlen(tmp)); } dicNum=i-1; //test /*for(i=1;i<=dicNum;i++) printf("%s\n",dictionary[i]);*/ //test /*for(i=1;i<=dicNum;i++) printf("%s\n",sortDic[i]);*/ //輸入待排序數 while(scanf("%s",tmp)) { if(strcmp(tmp,"XXXXXX")==0) return 0; //init flag memset(flag,0,sizeof(flag)); sort(tmp,tmp+strlen(tmp)); int count=0; for(i=1;i<=dicNum;i++) if(strcmp(tmp,sortDic[i])==0) //相等就標記一下 { flag[i]=1; count++; } if(count==0) { printf("NOT A VALID WORD\n"); printf("******\n"); continue; } //開始正式輸出 int pos=1; while(1) { strcpy(tmp,"zzzzzz"); //tmp必然是選出來最靠前的 for(i=1;i<=dicNum;i++) { if(flag[i]==1 && strcmp(tmp,dictionary[i])>0) //tmp字典序靠後 { strcpy(tmp,dictionary[i]); pos=i; } } if(count==0) break; else { printf("%s\n",tmp); count--; flag[pos]=0; //改回去 } } printf("******\n"); } return 0; }
最後更新:2017-04-03 14:53:53