演算法提高 P1003

来源:http://www.cnblogs.com/520xiuge/archive/2017/02/18/6412057.html
-Advertisement-
Play Games

作為一名網路警察,你的任務是監視電子郵件,看其中是否有一些敏感的關鍵詞。不過,有些狡猾的犯罪嫌疑人會改變某些單詞的字母順序,以逃避檢查。請編寫一個程式,發現這種調整過順序的關鍵詞。程式的輸入有兩行,第一行是關鍵詞列表,第二行是待檢查的句子。程式的輸出為在該句子中所找到的經過順序調整的關鍵詞。(單詞全 ...


作為一名網路警察,你的任務是監視電子郵件,看其中是否有一些敏感的關鍵詞。不過,有些狡猾的犯罪嫌疑人會改變某些單詞的字母順序,以逃避檢查。請編寫一個程式,發現這種調整過順序的關鍵詞。程式的輸入有兩行,第一行是關鍵詞列表,第二行是待檢查的句子。程式的輸出為在該句子中所找到的經過順序調整的關鍵詞。(單詞全部為小寫,單詞之間以一個空格分隔,每一行的單詞個數不限)

輸入:
  guns mines missiles
  aameric ssell snug dan iimsssle ot sit neeemis

輸出:
  guns missiles

主要是細節的處理。。。。

#include <stdio.h>
#include <string.h>
#define N 50 //the longest of word
#define TRUE 1 

typedef struct{
    char str[N];
    int num[26]; //frequence of word
}Word;

Word keyword[N],word[2*N],sortword[N];
char keystr[N*N+N],wordstr[2*N*N+2*N];
int key_len,word_len,find_len;

void Resolve(char *str, Word *w, int n, int *len){
    int i,k,t;
    //initial to zero
    for( i = 0 ; i < n ; i ++ )
        memset(w[i].num,0,sizeof(w[i].num));
    k = i = *len = 0;    
    while(TRUE){
        if(str[i] == ' ' || str[i] == '\0'){ //after the judge of "str[i]=='\0'", do "Copy"!
            //Copy
            for(t = k ; t < i ; t ++ ) 
                w[*len].str[t-k] = str[t];
            w[*len].str[i-k] = '\0';
            (*len) ++; //next keyword,'++'優先順序>'*'
            if(!str[i]) 
                break;
            k = i + 1; 
        }
        else{
            w[*len].num[str[i]-'a'] ++;
        }
        i ++;
    }
}

void Find_Keyword(){
    int i,j,k;
    find_len = 0;
    for(j = 0 ; j < word_len ; j ++ ){
        for(i = 0 ; i < key_len ; i ++ ){ // add the bracket
            for(k = 0 ; k < 26 ; k ++ ){
                if(word[j].num[k] != keyword[i].num[k])
                    break;
            }
            if(k == 26){ //have the adjusted keyword 
                strcpy(sortword[find_len].str,keyword[i].str);
                find_len ++;
                break; //need break
            }
        }
    }
}

void Sort_Keyword(){
    //Bubble Sort
    int i,j,k,min_len;
    char tmp[26];
    for(i = 0 ; i < find_len - 1; i ++ )
        for(j = i + 1 ; j < find_len ; j ++){
            min_len = strlen(sortword[i].str) > strlen(sortword[j].str) ? strlen(sortword[j].str) : strlen(sortword[i].str);//In fact,we can save time by calculating
            //the lenth of sortword[0:find_len-1].str at a time before the judge
            for(k = 0 ; k < min_len ; k ++ ){
                if(sortword[i].str[k] > sortword[j].str[k]){
                    strcpy(tmp,sortword[j].str);
                    strcpy(sortword[j].str,sortword[i].str);
                    strcpy(sortword[i].str,tmp);
                    break;
                }
                else if(sortword[i].str[k] < sortword[j].str[k]){ //linking with next step
                    break;
                }
            }
            if(k == min_len && strlen(sortword[i].str) > strlen(sortword[j].str)){
                strcpy(tmp,sortword[j].str);
                strcpy(sortword[j].str,sortword[i].str);
                strcpy(sortword[i].str,tmp);
            }
        }
    for(i = 0 ; i < find_len ; i ++ ){
        printf("%s",sortword[i].str);
        if(i < find_len - 1)
            putchar(' ');
        else puts("");
    }
        
}

int main(){
    gets(keystr),gets(wordstr);
    Resolve(keystr,keyword,N,&key_len);
    Resolve(wordstr,word,2*N,&word_len);
    //find the keyword from the word
    Find_Keyword();
    Sort_Keyword();
    return 0;
}

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文的主要內容是通過兩種方式實現簡單郵件的接收,一種方式是通過C語言實現,另一種是通過C#實現的, 兩種方式在實現上有許多的不同之處,但是本質上都是一樣的. 一,C語言實現方式 C語言接收郵件的步驟: 1.創建TCP連接 埠:預設110 2.連接到Pop3伺服器 伺服器名稱:例如"pop3.163 ...
  • 浪漫的周末從cnblogs開始。話說,今天和往常的周末一樣,韓君躲在被窩裡用手機翻閱著園子里的珠璣。一篇《應用XML作為資料庫的快速開發框架》的文章在韓君腦子裡激起了一波球形閃電。想想上周中剛好完成的一個WinCE小項目,這波久久不能平息。韓君做了一個比馬兄更艱難的決定,秒速穿戴衣褲後,開始了那第N ...
  • EF Core 1.0 Database First http://www.cnblogs.com/linezero/p/EFCoreDBFirst.html ASP.NET Core 開發 - Entity Framework (EF) Core,ASP.NET Core 操作資料庫。 Entit ...
  • 今後爭取每兩天能更新一次。平日的誘惑太多,雙休只顧玩了,進度有點慢。 接上一講的,類型的安全性,留下了點小尾巴——比較對象的相等性。 C#有四種比較相等的方式:除了“==”運算符外,System.Object定義了3中方法:ReferenceEqual()方法和兩種Equals(); 1.首先是“= ...
  • 前言 之前對於用SelfHost來手動實現Web API的宿主模式,似乎不是太深入,所以本篇文章我們一起來討論關於利用HttpClient來訪問Web API上的資源來進行探討以及註意相關事項,希望此文對你也有收穫。 來自XML或Json Content的簡單參數 當Web API方法中接受如Str ...
  • 註:下載本文提到的完整代碼示例請訪問:How to authorization Angular 2 app with asp.net core web api 在ASP.NET Core中使用Angular2,以及與Angular2的Token base身份認證 Angular2是對Angular1 ...
  • 本文版權歸博客園和作者吳雙本人共同所有,轉載和爬蟲請註明原文地址 www.cnblogs.com/tdws 相信瞭解了MS Identity認證體系的一定知道UserManager的作用,他是整個體系中的調度者,他定義了一套用戶行為來幫助我們管理用戶信息,角色信息,處理密碼等。而其實現則在UserS ...
  • 鏈接:http://china.nba.com/playerindex/ 所需獲取JSON數據頁面鏈接:http://china.nba.com/static/data/league/playerlist.json 數據來源:NBA中國官網 庫: requests 用於解析頁面文本數據 pandas ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...