hdu 6208 hash字串水題
The Dominator of Strings
Time Limit: 3000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 2694 Accepted Submission(s): 975
Problem Description Here you have a set of strings. A dominator is a string of the set dominating all strings else. The string S is dominated by T
Input The input contains several test cases and the first line provides the total number of cases.
For each test case, the first line contains an integer N indicating the size of the set.
Each of the following N lines describes a string of the set in lowercase.
The total length of strings in each case has the limit of 100000
The limit is 30MB for the input file.
Output For each test case, output a dominator if exist, or No if not.
Sample Input 3 10 you better worse richer poorer sickness health death faithfulness youbemyweddedwifebetterworsericherpoorersicknesshealthtilldeathdouspartandpledgeyoumyfaithfulness 5 abc cde abcde abcde bcde 3 aaaaa aaaab aaaac
Sample Output youbemyweddedwifebetterworsericherpoorersicknesshealthtilldeathdouspartandpledgeyoumyfaithfulness abcde No
Source 題意:給定一系列的字串,讓找出一個字串,可以包含其他所有的字串。
思路:找出最長的那個字串,對它進行hash,它一定是可能滿足條件的,如果對於最長的長度有多個字串,如果存在滿足條件的字串,那麼這幾個等長的字串一定相同。對於其他的字串,判斷最長的字串中是否含有其他字串就行了。(用最原始的暴力就能過, 可能是因為沒有大的資料)。
程式碼:
#include <stdio.h>
#include <cmath>
#include <cstring>
#include <string>
#include <algorithm>
#include<queue>
#include<iostream>
#include<list>
using namespace std;
typedef unsigned long long ull;
const int N = 1e5+5;
const int X = 163;
ull hhash[N], p[N];
char str[N];
char temp[N];
ull value[N];
int length[N];
int m;
void inIt() {
p[0] = 1;
for(int i = 1; i <= N - 5; i++)
p[i] = p[i-1] * X;
}
ull get(int l, int r, ull g[]) {
return g[r] - g[l-1]*p[r-l+1];
}
int main() {
inIt();
int t, index, Max, flag, len;
ull sum;
scanf("%d", &t);
while(t--) {
scanf("%d", &m);
Max = 0;
for(int i = 1; i <= m; i++) {
scanf("%s", str);
len = strlen(str);
if(len > Max) {
Max = len;
strcpy(temp, str);
}
sum = 0;
for(int j = 1; j <= len; j++)
sum = sum * X + (str[j-1] - 'a');
value[i] = sum;
length[i] = len;
}
hhash[0] = 0;
for(int i = 1; i <= Max; i++) {
hhash[i] = hhash[i-1]*X + (temp[i-1] - 'a');
}
for(int i = 1; i <= m; i++) {
flag = 0;
len = length[i];
for(int k = 1; k <= Max-len+1; k++) {
if(value[i] == get(k, k+len-1, hhash)) {
flag = 1;
break;
}
}
if(!flag) {
break;
}
}
if(flag) {
printf("%s\n", temp);
}
else
printf("No\n");
}
return 0;
}
相關推薦
hdu 6208 hash字串水題
The Dominator of Strings Time Limit: 3000/3000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 2694
hdu 1039 (字串水題)
不滿足的標記,純水 #include <iostream> #include <cstdio> #include <cstring> using namespace std; int main() { char s[25];
hdu 5510 Bazinga (字串水題)
題意很簡單:輸入n 然後輸入n個字串,求最大的i, 要求1 ~ i-1 中至少有一個串不是i的子串 思路:直接遍歷就行,兩個for迴圈巢狀(注意,都是自上而下開始),用strstr判斷是不是子串,
1217: 01字串 [水題]
ace label 技術 std i++ ima -i arc 試題 1217: 01字串 [水題] 時間限制: 1 Sec 內存限制: 128 MB提交: 116 解決: 93 統計 題目描述 對於長度為5位的一個01串,每一位都可能是0或1,一共有32種可
hdu 2614 Beat (dfs水題)
題意很簡單,一個人喜歡做ACM題,現在有n道題,做完每道題需要一個時間,比如做完第一題用了i分鐘,那麼他要做的下一題花費的時間j要保證j>=i。不然他不做。問最多能做幾題。 很清晰的dfs題目,資料弱到暴力都可以過(有人測過)。因為題目簡單,嘗試了一下之前不是很熟練的遞迴dfs(因為
【洛谷2264】情書(字串水題)
點此看題面 大致題意: 給你nnn個關鍵詞和一個文字串。讓你求出這些單詞在這個文字串中總共出現次數(一句話中同一單詞只算一次)。 細節 這題其實還是比較水的,一道很簡單的TrieTrieTrie題(資
hdu 4493 Tutor(水題+讀題)
Tutor Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Total Submission(s): 4780 Accepted Submissio
hdu 2043 密碼 (水題)
網上流傳一句話:"常在網上飄啊,哪能不挨刀啊~"。其實要想能安安心心地上網其實也不難,學點安全知識就可以。 首先,我們就要設定一個安全的密碼。那什麼樣的密碼才叫安全的呢?一般來說一個比較安全的密碼至少應該滿足下面兩個條件: (1).密碼長度大於等於8,且不要超過16。 (2).密碼中的字元應該來自下面“字
【字串水題】HDU2617Happy 2009
題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=2617 Problem Description No matter you know me or not. Bless you happy in 2009. Input
HDU--1228:A+B (水題)
2. 原始碼: //HOJ--1228:A+B #include<iostream> #include<string> #include<memory.h> using namespace std; int cmp(string a
字串”水“題
題目描述 給出一個長度為n的字串(1<=n<=100000),求有多少個連續字串中所有的字母都出現了偶數次。 輸入 第一行一個正整數T,表示資料組數(1 <= T <= 10)。 接下來T行,每行有一個只包含小寫字母的字串。 輸出
【HDU - 2072 】單詞數(字串讀入技巧,sstream大法,水題,字串讀入格式)
題幹: lily的好朋友xiaoou333最近很空,他想了一件沒有什麼意義的事情,就是統計一篇文章裡不同單詞的總數。下面你的任務是幫助xiaoou333解決這個問題。 Input 有多組資料,每組一行,每組就是一篇小文章。每篇小文章都是由小寫字母和空格組成,沒有標點符號,遇到#時表示
hdu 1236 排名 (字串處理)水題
排名 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi
HDU 2017 字串統計(水題)
字串統計 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi
Dijkstra算法---HDU 2544 水題(模板)
fin size out hdu 2544 %d stdio.h stream 之間 sizeof /* 對於只會弗洛伊德的我,迪傑斯特拉有點不是很理解,後來發現這主要用於單源最短路,稍稍明白了點,不過還是很菜,這裏只是用了鄰接矩陣 套模板,對於鄰接表暫時還,,,沒做題,後
杭電(hdu)2053 Switch Game 水題
center ++ class chang names top weight ext == Switch Game Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (J
hdu 5538 House Building(長春現場賽——水題)
onos white ng- ron number ots 1.7 mage time 題目鏈接:acm.hdu.edu.cn/showproblem.php?pid=5538 House Building Time Limit: 2000/1000
HDU 5744 Keep On Movin (思維題,水題)
amp tle 輸出 ngs pro ber end use view Problem Description Professor Zhang has kinds of characters and the quantity of the i-th character is
HDU 1017 A Mathematical Curiosity (枚舉水題)
tracking tween hat string include -m add des tom Problem Description Given two integers n and m, count the number of pairs of in
HDU 6182 A Math Problem 水題
std 水題 div 輸出 iterator code php else fin 題目鏈接: http://acm.hdu.edu.cn/showproblem.php?pid=6182 題目描述: 輸入N, 輸出滿足k^k <= N 的 k的個數 解題思