#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
char codes[12][12]={'\0'};
int main(){
freopen("input.txt", "r", stdin);
int a=0;
int set=1;
int decodable[12]={0}; //儲存每一record和前面所有record比較,找不到字首相同,則為可編碼
while(scanf("%s",codes[a])!=EOF){
decodable[0]=1; //第一個record因為只能和自己比,故先設為1
if(codes[a][0]!='9'){
for(int i=0;i<a;i++){
if(a==0){ //若為第一個狀況,則先跳出
break;
}
int flag=0;
while(1){
//printf("%c %c\n",codes[i][flag],codes[a][flag]);
if(codes[a][flag]==codes[i][flag]){ //若檢查為相同的字
flag++; //旗標往下一位元跳
decodable[a]=0; //暫定此record的可編碼為0
}
//若其中一項record的下一字元為'\0'且可編碼依然為0,則跳出
if((codes[a][flag]=='\0'||codes[i][flag]=='\0') && decodable[a]==0)
break;
//若在兩項record都還沒到'\0',且發現兩位元不同,則為可編碼
if(codes[a][flag]!=codes[i][flag]&&codes[i][flag]!='\0'&&codes[a][flag]!='\0'){
decodable[a]=1;
break;
}
}
if(decodable[a]==0)break;
}
}
if(codes[a][0]=='9'){
for(int i=0;i<a;i++){
if(decodable[i]==0){ //若發現其中一項為0,則為不可編碼
printf("Set %d is not immediately decodable\n",set);
a=-1;
break;
}
if(i==(a-1) && decodable[i]==1){ //若i已經到了第a-1項且依然為1
a=-1;
printf("Set %d is immediately decodable\n",set);
}
}
set++;
memset(decodable,0,sizeof(int)); //初始化
}
a++;
}
return 0;
}
2014年9月19日星期五
[Uva] 644 - Immediate Decodability
訂閱:
發佈留言 (Atom)
-
因為先前寫UVa時,檔案名稱有時會花心思改,有時就直接把題目名稱加上.cpp就貼上了 導致現在有不同的格式出現 現在要處理的事情很簡單 1. 去除空白 2. 將底線 ( _ ) 換成dash ( - ) 經過一番查詢,終於發現最簡單的方法 - re...
-
文章出處: http://infbugs.blogspot.tw/2011/12/c_20.html 謝謝沙耶,解答了我長久以來對於 input/output 的疑惑。 C 語言入門 - 在線上批改系統練功 如何練習使用基本語法 自己出個練習題試著寫...
-
因為X205的架構非常獨特,Linux對其硬體的支援度非常弱(據說kernel4.0之後有所改善,這倒還需要研究一番),目前的進度是將Ubuntu系統塞進32Gb的固態碟中,並設定能自動抓取開機磁區,之後可能還要針對WIFI、音效、快捷鍵和讀卡機等週邊設備進行設定。 1...
沒有留言:
發佈留言