#include <stdio.h> #include <string.h> #include <stdlib.h> #include <ctype.h> //isalpha char keywords[30][100]={'\0'}; char line[30][100]={'\0'}; char new_line[30][100]={'\0'}; int count[30]={0}; int main(){ freopen("input.txt", "r", stdin); int K,E; int max=0; int excuse=1; while(scanf("%d %d",&K,&E)!=EOF){ getchar(); //輸入關鍵字詞 for(int i=0;i<K;i++){ gets(keywords[i]); } //getchar(); //輸入辯詞 for(int i=0;i<E;i++){ gets(line[i]); int len=strlen(line[i]); //獲得line長度 for(int j=0;j<len;j++) new_line[i][j]=line[i][j]; //Copy一份至new_line for(int j=0;j<len;j++){ //消除new_line裡所有非字母符號 if(!isalpha(new_line[i][j])){ new_line[i][j]=' '; } if(new_line[i][j]>='A'&&new_line[i][j]<='Z')new_line[i][j]+=32; //所有大寫換小寫 } //puts(line[i]); //puts(new_line[i]); } for(int w=0;w<K;w++) //每個keyword都跑一次 for(int i=0;i<E;i++){ //每個excuse都跑一次 int match=0, start=0, flag=0,flag2=0; while(new_line[i][flag]!='\0'){ //如果在excuse中檢查到和單字字首相同,且前一個字元不為字母時,start=1 if(new_line[i][flag]==keywords[w][0]&&!isalpha(new_line[i][flag-1]))start=1; if(new_line[i][flag]==keywords[w][flag2]&&start==1){ //之後的檢查,在start=1的前提下進行 match=1; //依然和單字相同時,match維持為1 flag++; flag2++; }else{ start=0; //一檢查到不是,則start=0、match=0,flag2回到單字起點 match=0; flag++; flag2=0; } //如果檢查到單字字尾,且excuse中後一個字元不為字母,且match=1時,該excuse的單字計數+1 if( (keywords[w][flag2]=='\0') && (!isalpha(new_line[i][flag])) && (match==1) ){ count[i]++; } } } printf("Excuse Set #%d\n", excuse); excuse++; for(int i=0;i<E;i++){ if(count[i]>=max)max=count[i]; } for(int i=0;i<E;i++){ if(count[i]==max)puts(line[i]); } //for(int i=0;i<E;i++)printf("%d ",count[i]); printf("\n"); for(int i=0;i<30;i++)count[i]=0; max=0; } return 0; }
2014年9月13日星期六
[UVa] 409 - Excuses, Excuses!
訂閱:
發佈留言 (Atom)
-
因為先前寫UVa時,檔案名稱有時會花心思改,有時就直接把題目名稱加上.cpp就貼上了 導致現在有不同的格式出現 現在要處理的事情很簡單 1. 去除空白 2. 將底線 ( _ ) 換成dash ( - ) 經過一番查詢,終於發現最簡單的方法 - re...
-
文章出處: http://infbugs.blogspot.tw/2011/12/c_20.html 謝謝沙耶,解答了我長久以來對於 input/output 的疑惑。 C 語言入門 - 在線上批改系統練功 如何練習使用基本語法 自己出個練習題試著寫...
-
一開始用數學方法推斷得出,設輸入為n k為在n的前一斜線列數,故只要找到 (1+k)*k/2 < n 的最大k值,即可判定 k%2 == 1 => ((2*n)-(k*k)-k)/2 / ((k*k)+(3*k)-(2*n)+4)/2 k%2 ==...
沒有留言:
發佈留言