bzoj 3439: Kpm的MC密碼

Description


?背景

??? 想Kpm當年為了防止別人隨便進入他的MC,給他的PC設了各種奇怪的密碼和驗證問題(不要問我他是怎么設的。。。),于是乎,他現在理所當然地忘記了密碼,只能來解答那些神奇的身份驗證問題了。。。

?描述

??? Kpm當年設下的問題是這樣的:

??? 現在定義這么一個概念,如果字符串s是字符串c的一個后綴,那么我們稱c是s的一個kpm串。

??? 系統將隨機生成n個由a…z組成的字符串,由1…n編號(s1,s2…,sn),然后將它們按序告訴你,接下來會給你n個數字,分別為k1…kn,對于每一個ki,要求你求出列出的n個字符串中所有是si的kpm串的字符串的編號中第ki小的數,如果不存在第ki小的數,則用-1代替。(比如說給出的字符串是cd,abcd,bcd,此時k1=2,那么”cd”的kpm串有”cd”,”abcd”,”bcd”,編號分別為1,2,3其中第2小的編號就是2)(PS:如果你能在相當快的時間里回答完所有n個ki的查詢,那么你就可以成功幫kpm進入MC啦~~)

Input

?

??? 第一行一個整數 n 表示字符串的數目

??? 接下來第二行到n+1行總共n行,每行包括一個字符串,第i+1行的字符串表示編號為i的字符串

??? 接下來包括n行,每行包括一個整數ki,意義如上題所示

?

Output

?

??? 包括n行,第i行包括一個整數,表示所有是si的kpm串的字符串的編號中第ki小的數

Sample Input

3
cd
abcd
bcd
2
3
1

Sample Output

2
-1
2

樣例解釋

“cd”的kpm 串有”cd”,”abcd”,”bcd”,編號為1,2,3,第2小的編號是

2,”abcd”的kpm串只有一個,所以第3小的編號不存在,”bcd”的kpm

串有”abcd”,”bcd”,第1小的編號就是2。

數據范圍與約定

設所有字符串的總長度為len

對于100%的數據,1<=n<=100000,0<len<=300000

HINT

Source

Kpmcup#0 By Greens

?

題目求的是后綴,那么把串倒過來,就變成前綴問題了,可以考慮trie樹解決。。。

相當于求串的開頭到根節點的路徑上的k值。。。

那么可以trie樹套值域線段樹,動態開節點就好了,每個點都有一個到根的路徑的值域線段樹,然后查詢k值在線段樹上跑一跑就可以了

// MADE BY QT666
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<iostream>
#include<cstring>
using namespace std;
typedef long long ll;
const int N=500050;
int n,trie[N][26],tt,sz,rt[N*20],ls[N*20],rs[N*20],sum[N*20],val[N],ed[N];
char s[N];
void ins(int &x,int l,int r,int v){if(!x) x=++sz;if(l==r){sum[x]++;return;}int mid=(l+r)>>1;if(v<=mid) ins(ls[x],l,mid,v);else ins(rs[x],mid+1,r,v);sum[x]=sum[ls[x]]+sum[rs[x]];
}
void insert(int id){int len=strlen(s+1);int x=0;for(int i=len;i;i--){if(!trie[x][s[i]-'a']) trie[x][s[i]-'a']=++tt;x=trie[x][s[i]-'a'];ins(rt[x],1,n,id);}ed[id]=x;
}
int query(int x,int l,int r,int k){if(l==r){return l;}int mid=(l+r)>>1;if(sum[ls[x]]>=k) return query(ls[x],l,mid,k);else return query(rs[x],mid+1,r,k-sum[ls[x]]);
}
int main(){scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%s",s+1);insert(i);}for(int i=1;i<=n;i++){int k;scanf("%d",&k);if(sum[rt[ed[i]]]<k) puts("-1");else printf("%d\n",query(rt[ed[i]],1,n,k));}return 0;
}

轉載于:https://www.cnblogs.com/qt666/p/7219614.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/391971.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/391971.shtml
英文地址,請注明出處:http://en.pswp.cn/news/391971.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python創建類統計屬性_輕松創建統計數據的Python包

python創建類統計屬性介紹 (Introduction) Sometimes you may need a distribution figure for your slide or class. Since you are not using data, you want a quick solution.有時&#xff0c;您的幻燈片或課程可能需要一個分配圖。 由于您不使用數據&#xff0c;因此需要快…

pytorch深度學習_在本完整課程中學習在PyTorch中應用深度學習

pytorch深度學習In this complete course from Fawaz Sammani you will learn the key concepts behind deep learning and how to apply the concepts to a real-life project using PyTorch. 在Fawaz Sammani的完整課程中&#xff0c;您將學習深度學習背后的關鍵概念&#x…

html讓a標簽左右一樣寬,button和a標簽設置相同的css樣式,但是寬度不同

登錄注冊.btn {display: block;-moz-appearance: none;background: rgba(0, 0, 0, 0) none repeat scroll 0 0;border-radius: 0.25rem;box-sizing: border-box;cursor: pointer;font-family: inherit;font-size: 0.8rem;height: 2rem;line-height: 1.9rem;margin: 0;padding: …

淺析STM32之usbh_def.H

【溫故而知新】類似文章淺析USB HID ReportDesc (HID報告描述符) 現在將en.stm32cubef1\STM32Cube_FW_F1_V1.4.0\Middlewares\ST\STM32_USB_Host_Library\Core\Inc\usbh_def.H /********************************************************************************* file us…

spring—依賴注入

依賴注入&#xff08;Dependency Injection&#xff09; 它是 Spring 框架核心 IOC 的具體實現。 在編寫程序時&#xff0c;通過控制反轉&#xff0c;把對象的創建交給了 Spring&#xff0c;但是代碼中不可能出現沒有依賴的情況。 IOC 解耦只是降低他們的依賴關系&#xff0c;…

C# (類型、對象、線程棧和托管堆)在運行時的相互關系

在介紹運行時的關系之前,先從一些計算機基礎只是入手,如下圖: 該圖展示了已加載CLR的一個windows進程,該進程可能有多個線程,線程創建時會分配到1MB的棧空間.棧空間用于向方法傳遞實參,方法定義的局部變量也在實參上,上圖的右側展示了線程的棧內存,棧從高位內存地址向地位內存地…

2019-08-01 紀中NOIP模擬賽B組

T1 [JZOJ2642] 游戲 題目描述 Alice和Bob在玩一個游戲&#xff0c;游戲是在一個N*N的矩陣上進行的&#xff0c;每個格子上都有一個正整數。當輪到Alice/Bob時&#xff0c;他/她可以選擇最后一列或最后一行&#xff0c;并將其刪除&#xff0c;但必須保證選擇的這一行或這一列所有…

knn分類 knn_關于KNN的快速小課程

knn分類 knnAs the title says, here is a quick little lesson on how to construct a simple KNN model in SciKit-Learn. I will be using this dataset. It contains information on students’ academic performance.就像標題中所說的&#xff0c;這是關于如何在SciKit-Le…

spring—配置數據源

數據源&#xff08;連接池&#xff09;的作用 數據源(連接池)是提高程序性能如出現的 事先實例化數據源&#xff0c;初始化部分連接資源 使用連接資源時從數據源中獲取 使用完畢后將連接資源歸還給數據源 常見的數據源(連接池)&#xff1a;DBCP、C3P0、BoneCP、Druid等 開發步…

大型網站系統與Java中間件實踐pdf

下載地址&#xff1a;網盤下載 基本介紹 編輯內容簡介 到底是本什么書&#xff0c;擁有這樣一份作序推薦人列表&#xff1a;阿里集團章文嵩博士|新浪TimYang|去哪網吳永強|丁香園馮大輝|蘑菇街岳旭強|途牛湯崢嶸|豆瓣洪強寧|某電商陳皓/林昊…… 這本書出自某電商技術部總監之手…

office漏洞利用--獲取shell

環境&#xff1a; kali系統&#xff0c; windows系統 流程&#xff1a; 在kali系統生成利用文件&#xff0c; kali系統下監聽本地端口&#xff0c; windows系統打開doc文件&#xff0c;即可中招 第一種利用方式&#xff0c; 適合測試用&#xff1a; 從git下載代碼&#xff1a; …

pandas之DataFrame合并merge

一、merge merge操作實現兩個DataFrame之間的合并&#xff0c;類似于sql兩個表之間的關聯查詢。merge的使用方法及參數解釋如下&#xff1a; pd.merge(left, right, onNone, howinner, left_onNone, right_onNone, left_indexFalse, right_indexFalse,    sortFalse, suffi…

typescript_如何掌握高級TypeScript模式

typescriptby Pierre-Antoine Mills皮埃爾安托萬米爾斯(Pierre-Antoine Mills) 如何掌握高級TypeScript模式 (How to master advanced TypeScript patterns) 了解如何為咖喱和Ramda創建類型 (Learn how to create types for curry and Ramda) Despite the popularity of curry…

html函數splice,js數組的常用函數(slice()和splice())和js引用的三種方法總結—2019年1月16日...

總結&#xff1a;slice()和splice()slice(參數1,參數2)可以查找數組下對應的數據&#xff0c;參數1為起始位置&#xff0c;參數2為結束位置&#xff0c;參數2可以為負數&#xff0c;-1對應的是從后向前數的第一個數值。splice()可以進行增刪改查數據操作&#xff0c;splice(參數…

leetcode 643. 子數組最大平均數 I(滑動窗口)

給定 n 個整數&#xff0c;找出平均數最大且長度為 k 的連續子數組&#xff0c;并輸出該最大平均數。 示例&#xff1a; 輸入&#xff1a;[1,12,-5,-6,50,3], k 4 輸出&#xff1a;12.75 解釋&#xff1a;最大平均數 (12-5-650)/4 51/4 12.75 代碼 class Solution {publ…

python ==字符串

字符串類型(str)&#xff1a; 包含在引號&#xff08;單&#xff0c;雙&#xff0c;三&#xff09;里面&#xff0c;由一串字符組成。 用途&#xff1a;姓名&#xff0c;性別&#xff0c;地址&#xff0c;學歷&#xff0c;密碼 Name ‘zbk’ 取值: 首先要明確&#xff0c;字符…

認證鑒權與API權限控制在微服務架構中的設計與實現(一)

作者&#xff1a; [Aoho’s Blog] 引言&#xff1a; 本文系《認證鑒權與API權限控制在微服務架構中的設計與實現》系列的第一篇&#xff0c;本系列預計四篇文章講解微服務下的認證鑒權與API權限控制的實現。 1. 背景 最近在做權限相關服務的開發&#xff0c;在系統微服務化后&a…

mac下完全卸載程序的方法

在國外網上看到的&#xff0c;覺得很好&#xff0c;不僅可以長卸載的知識&#xff0c;還對mac系統有更深的認識。比如偏好設置文件&#xff0c;我以前設置一個程序壞了&#xff0c;打不開了&#xff0c;怎么重裝都打不開&#xff0c;后來才知道系統還保留著原來的偏好設置文件。…

機器學習集群_機器學習中的多合一集群技術在無監督學習中應該了解

機器學習集群Clustering algorithms are a powerful technique for machine learning on unsupervised data. The most common algorithms in machine learning are hierarchical clustering and K-Means clustering. These two algorithms are incredibly powerful when appli…

自考本科計算機要學什么,計算機自考本科需要考哪些科目

高科技發展時代&#xff0c;怎離得開計算機技術&#xff1f;小學生都要學編程了&#xff0c;未來趨勢一目了然&#xff0c;所以如今在考慮提升學歷的社會成人&#xff0c;多半也青睞于計算機專業&#xff0c;那么計算機自考本科需要考哪些科目&#xff1f;難不難&#xff1f;自…