BZOJ 2251 [2010Beijing Wc]外星聯絡

来源:https://www.cnblogs.com/zwfymqz/archive/2018/02/08/8430014.html
-Advertisement-
Play Games

Description 小 P 在看過電影《超時空接觸》(Contact)之後被深深的打動,決心致力於尋找外星人的事業。於是,他每天晚上都爬在屋頂上試圖用自己的收音機收聽外星人發來的信息。雖然他收聽到的僅僅是一些雜訊,但是他還是按照這些雜訊的高低電平將接收到的信號改寫為由 0 和 1 構成的串, 並 ...


Description

小 P 在看過電影《超時空接觸》(Contact)之後被深深的打動,決心致力於尋
找外星人的事業。於是,他每天晚上都爬在屋頂上試圖用自己的收音機收聽外星
人發來的信息。雖然他收聽到的僅僅是一些雜訊,但是他還是按照這些雜訊的高
低電平將接收到的信號改寫為由 0 和 1 構成的串, 並堅信外星人的信息就隱藏在
其中。他認為,外星人發來的信息一定會在他接受到的 01 串中重覆出現,所以
他希望找到他接受到的 01 串中所有重覆出現次數大於 1 的子串。但是他收到的
信號串實在是太長了,於是,他希望你能編一個程式來幫助他。

Input

輸入文件的第一行是一個整數N ,代表小 P 接收到的信號串的長度。 
輸入文件第二行包含一個長度為N 的 01 串,代表小 P 接收到的信號串。

Output

輸出文件的每一行包含一個出現次數大於1 的子串所出現的次數。輸出的順
序按對應的子串的字典序排列。

Sample Input

7
1010101

Sample Output

3
3
2
2
4
3
3
2
2

HINT

 

  對於 100%的數據,滿足 0 <=  N     <=3000 

 

Source

  做這道題之前我們需要首先明白一件事情 所有尾碼的首碼是字元串的子串 這樣我們就把子串的出現資次數轉換成了求尾碼的首碼的出現次數的問題 在尾碼的首碼上搞事情,這會讓你想到什麼? 沒錯!尾碼數組的Height數組 我們可以在Height數組裡面枚舉 字典序的話好處理,Height數組就是按字典序排的 首先枚舉排名,在Height數組中不斷枚舉首碼,對於每一個首碼,不斷往後枚舉Height,枚舉的時候統計次數。 哎呀說的好亂,自己看代碼把  
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
const int MAXN=2*1e6+10;
int sa[MAXN],rak[MAXN],tp[MAXN],tax[MAXN],a[MAXN],N,M,height[MAXN];
char s[MAXN];
void Qsort()
{
    for(int i=1;i<=M;i++) tax[i]=0;
    for(int i=1;i<=N;i++) tax[rak[i]]++;
    for(int i=1;i<=M;i++) tax[i]+=tax[i-1];
    for(int i=N;i>=1;i--) sa[ tax[rak[tp[i]]]-- ] = tp[i];
}
void Ssort()
{
    M=127;
    for(int i=1;i<=N;i++) rak[i]=a[i],tp[i]=i;Qsort();
    for(int w=1,p=1; p<N ; w<<=1,M=p)
    {
        p=0;
        for(int i=N-w+1;i<=N;i++) tp[++p]=i;
        for(int i=1;i<=N;i++) if(sa[i]>w) tp[++p]=sa[i]-w;
        Qsort();
        swap(tp,rak);
        rak[sa[1]]=1;p=1;
        for(int i=2;i<=N;i++) rak[sa[i]] = (tp[sa[i]]==tp[sa[i-1]]&&tp[sa[i]+w]==tp[sa[i-1]+w])?p:++p;
    }
    int j,k=0;
    for(int i=1;i<=N;height[rak[i++]]=k)
        for(k=k?k-1:k,j=sa[rak[i]-1];a[i+k]==a[j+k];++k );
    for(int i=0;i<=N;i++)
    {
        for(int j=height[i]+1;;j++)
        {
            int tot=1;
            for(int k=i+1;height[k]>=j;++k,++tot);
            if(tot>1) printf("%d\n",tot);
            else break;
        }
    }
}
int main()
{
    #ifdef WIN32
    freopen("a.in","r",stdin);
    #else
    #endif
    int Meiyong;
    cin>>Meiyong;
    scanf("%s",s);
    N=strlen(s);
    for(int i=1;i<=N;i++) a[i]=s[i-1];
    Ssort();
    return 0;
}

 

       

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

-Advertisement-
Play Games
更多相關文章
  • 概要 字典是用來存儲不重覆key的Hash結構。不同於集合(Set)的一點,字典使用的是[key,value]的形式來存儲數據。 JavaScript的對象(Object:{})只能用字元串當做key。使用起來有一定限制。 為瞭解決這個問題,ES6提供的Map數據結構。它類似與對象,也是[key,v ...
  • 鏈接:https://pan.baidu.com/s/1i7cSkqL 密碼:g80i 最近給央視做了個H5答題游戲,但在倒計時上遇到一個終端問題:手機端按Home鍵將微信收入後臺之後,IOS11 會繼續跑JS五秒鐘,註意是5秒,也就是倒計時9的時候收到後臺,等1分鐘再打開,JS會從4開始倒計時。 ...
  • 鏈接:https://pan.baidu.com/s/1kW1At9d 密碼:g0he 這裡說的div是指固定大小的,動態往裡面填充文字的時候,文字一直水平垂直居中(換行也是)。就和td標簽一樣。當然這個demo是針對文字的,如果有人問圖片和其他固定大小的盒模型怎麼辦- -我只能說回去好好學學基礎, ...
  • 介紹CSS中的:befor、:after創建的偽元素幾種使用場景,如填充文本、作為iconfont、進度線、時間線以及幾何圖形。 ...
  • html是很多人編程的入門領域。作為初學者,不管你是在哪裡學的,學校,視頻教程,網路教程等等……它們都會告訴你HTML即:超文本標記語言(Hyper Text Markup Language)。但第一次接觸或許很難理解這簡簡單單的幾個字。 excel表格相信大家都有接觸,保持在磁碟上的文件尾碼名為“ ...
  • 1.Dubbo介紹 Dubbo是 阿裡巴巴公司開源的一個高性能優秀的服務框架,使得應用可通過高性能的 RPC 實現服務的輸出和輸入功能,可以和Spring框架無縫集成。 2.Dubbo原理 是不是看著比較懵逼,博主用通俗的語言講解一下吧,這張圖裡兩個英文單詞大家應該比較熟悉,一個Provider(提 ...
  • 大型互聯網的系統一般會架構散佈於多個數據中心和一些私有/公有雲,由真實物理機以及虛擬機組成。架構中部署的關鍵工具包括實現報警的Zabbix,以及一個採集、聚合和存儲度量的六階段流水線。流水線主要由開源工具構建,其中使用了OpenTSDB、Kafka、Elasticsearch和Grafana,還有一... ...
  • if 如果 else 否則 switch 切換判斷 case 實例 break 退出 return 返回 default 預設 variable array 數組 null 空的 無效的 pointer 指針 Exception 異常 index 腳標 索引 outof 在...之外 bounds ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...