【POJ 3630】Phone List 中文題意&題解&程式碼(C++)
Phone List
Time Limit: 1000MS Memory Limit: 65536K
Description
Given a list of phone numbers, determine if it is consistent in the sense that no number is the prefix of another. Let’s say the phone catalogue listed these numbers:
Emergency 911
Alice 97 625 999
Bob 91 12 54 26
In this case, it’s not possible to call Bob, because the central would direct your call to the emergency line as soon as you had dialled the first three digits of Bob’s phone number. So this list would not be consistent.
Input
The first line of input gives a single integer, 1 ≤ t ≤ 40, the number of test cases. Each test case starts with n, the number of phone numbers, on a separate line, 1 ≤ n ≤ 10000. Then follows n lines with one unique phone number on each line. A phone number is a sequence of at most ten digits.
Output
For each test case, output “YES” if the list is consistent, or “NO” otherwise.
Sample Input
2
3
911
97625999
91125426
5
113
12340
123440
12345
98346
Sample Output
NO
YES
中文題意:
輸入一堆由數字組成字串,問是否有一串數字是另一串數字的字首,有的話輸出NO,沒有則輸出YES。
題解:
按資料來看,用字典樹來處理是一個很好的做法,在建字典樹的過程中,特殊判斷一下,最後輸出。
#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
using namespace std;
struct node{
int ch[10];
void init()
{
for (int i=0;i<10;i++)
ch[i]=0;
}
bool pan()//判斷這是否是一個已有字串的終點
{
for (int i=0;i<10;i++)
if (ch[i]!=0) return 1;
return 0;
}
}tr[1000005*12];
char s[1000005];
int p=0,tot=0,len,n,t,flag[1000005];
void add(int id)
{
int now=0;
for (int i=0;i<len;i++)
{
int tmp=s[i]-'0';
if (now!=0 && flag[now]!=id && (tr[now].pan()==0))
p=-1;
//判斷之前已經加入字典樹的那些數串是否是此次加入字串的字首
//感覺自己想的這個方法有點sb可以去別人的部落格參考一下
//有沒有更好的判斷方法
if (!tr[now].ch[tmp])
{
tot++;
tr[now].ch[tmp]=tot;
tr[tot].init();
flag[tot]=id;
}
now=tr[now].ch[tmp];
}
if (flag[now]!=id) p=-1;
}
int main()
{
scanf("%d",&t);
for (int w=1;w<=t;w++)
{
tot=0;
p=0;
tr[tot].init();
scanf("%d",&n);
for (int i=1;i<=n;i++)
{
scanf("%s",s);
len=strlen(s);
if (p==0)
add(i);
}
if (p==-1) printf("NO\n");
else printf("YES\n");
}
}
還有題上沒給字串的長度範圍,坑的我re兩次。。。。。
相關推薦
【POJ 3630】Phone List 中文題意&題解&程式碼(C++)
Phone List Time Limit: 1000MS Memory Limit: 65536K Description Given a list of phone numbers, determine if it is consistent
【POJ2406】Power Strings 中文題意&題解&程式碼(C++)
Power Strings Time Limit: 3000MS Memory Limit: 65536K Description Given two strings a and b we define a*b to be their conca
【poj 2488】A Knight's Journey 中文題意&題解&程式碼(C++)
中文題意: 給出一個p行q列的國際棋盤,馬可以從任意一個格子開始走,問馬能否不重複的走完所有的棋盤。如果可以,輸出按字典序排列最小的路徑。列印路徑時,列用大寫字母表示(A表示第一列),行用阿拉伯數
【poj 3126】Prime Path 題意&題解&程式碼(C++)
變換的過程要保證 每次變換出來的數都是一個 四位素數,而且當前這步的變換所得的素數 與 前一步得到的素數 只能有一個位不同,而且每步得到的素數都不能重複。 求從a到b最少需要的變換次數。無
【poj 2627】 Sudoku 題意&題解&程式碼(C++)
題目連結: http://poj.org/problem?id=2676 題意: 給出一個未填的數獨,求這個數獨的解並輸出填好的數獨,若此數獨無解,則輸出原給定的錯誤數獨。 題解: dfs回溯
【poj 1159】Palindrome 題意&題解&程式碼(C++)
題目連結: http://poj.org/problem?id=1159 題意: 給出一個長為n的字串,求最少新增幾個字元可以將這個字串變為迴文字串。 題解: 要把這個串變為迴文串,很容易想到
【資料結構】棧的應用--數制轉換(c++)
標頭檔案: #pragma once #include <iostream> #include <assert.h> using namespace std; template<class Type> class SeqStack
POJ 3630:Phone List(字典樹入門)
題目意思: 如果撥打的電話號碼的字首是一個完整的電話號碼,則這個電話就不能撥通,判斷給出的電話列表是否全部能撥通。 這個題目只用再建立字典樹的過程中做判斷就行了,沒必要建完之後再去查詢,我們可以在節
【Visual Studio】2003-2015中文完整旗艦版(附序列號)
隱約記得我需要的時候想下載,但是百度搜索出來的太多了具有選擇困難症的我真的迷茫了。。。。這裡給大家分享幾個VS版本,都是最終版的,也是中文版的!.Visual Studio 2005:http://pan.baidu.com/s/1c0eudyS Visual Studi
【MM配置】SAP MM模塊配置目錄(轉)
作者 倉儲 5.1 價格 中心 部分 輸出 會計 soft 目錄1 配置總體框架11.1 系統環境11.2 機構設置11.3 工廠結構概圖:11.4 產品組成結構圖31.5 BOM簡要清單41.6 主要業務藍圖42 一般設置部分(全局)52.1 定義國家SPRO (後補)5
【設計模式】module模式&&Revealing module (揭示)模式
但是 出版 參數傳遞 9.png 自然 指向 們的 private 初級 寫在前面 《head first設計模式》裏有一篇文章,是說使用模式的心智, 1、初學者"心智" :"我要為HELLO WORLD找個模式" 2、中級人員模式: "或許這裏我需要一個單件
【洛谷】P2983 [USACO10FEB]購買巧克力Chocolate Buying(貪心)
輸出格式 準備 anti radius rod money pri price -s 題目描述 Bessie and the herd love chocolate so Farmer John is buying them some. The Bovine Choco
【AI基礎】python:openCV——處理鼠標事件(1)
python:opencv 處理鼠標 一、用戶通過鼠標對圖像視窗最常見的操作有: 左鍵單擊按下 左鍵單擊擡起 左鍵按下拖動 鼠標指針位置移動 二、單次單擊操作響應事件及順序 Opencv中setMouseCallback()創建了一個鼠標回調函數,每次在圖像上單擊鼠標左鍵再擡起的過程,
【AI基礎】python:openCV——圖像算術運算(1)
圖像算術運算圖像算術運算 1.圖像加法使用cv2.add()將兩幅圖像進行加法運算,也可以直接使用numpy,res=img1+img2.兩幅圖像的大小,類型必須一致,或者第二個圖像可以是一個簡單的標量值。openCV的加法是一種飽和操作,而numpy的加法是一種模操作。OpenCV的結果會更好 import
【AI基礎】python:openCV——圖像算術運算(2):按位運算
按位運算 openCV 按位運算 按位操作有:AND,OR,NOT,XOR 等。當我們提取圖像的 一部分,選擇非矩形 ROI 時這些操作會很有用,常用於Logo 投射。 本節操作思路:通過 threshold 函數將圖片 固定閾值二值化,定義:圖像的二值化,就是將圖像上的像素點的灰度值設置為0或25
【小程序】用nginx進行反向代理處理(windows)
TP 代理 targe 反向 todo nginx安裝 http cnblogs smi 在通過json-server搭建本地服務器得到 http://localhost:3000/todos 的基礎上,要想將接口改為www.test.com/todos這樣的形式 ,
25、【opencv入門】輪廓查找與繪制(3)——凸包
ise 技術分享 bool and s函數 span spa push_back 返回 一簡介 1、凸包 凸包(Convex Hull)是一個計算機幾何圖形學中的概念, 簡單來說, 給定二維平面點集, 凸包就是能夠將最外層的點連接起來構成的凸多邊形, 它能夠包含點集中所
26、【opencv入門】輪廓查找與繪制(4)——正外接矩形
waitkey font 定義 truct 形狀 esp 圖片 namespace open 一、簡介 1、使用特定形狀的輪廓包圍 在實際應用中, 經常會有將檢測到的輪廓用多邊形表示出來的需求, 提取包圍輪廓的多邊形也方便我們做進一步分析, 輪廓包圍主要有一下幾種: 輪
【移動開發】關於一對一視訊聊天直播技術(七):直播雲 SDK 效能測試模
本篇是《一對一視訊直播技術詳解》系列的最後一篇直播雲 SDK 效能測試模型,SDK 的效能對最終 App 的影響非常大。SDK 版本迭代快速,每次釋出前都要進行系統的測試,測試要有比較一致的行為,要有效能模型作為理論基礎,對 SDK 的效能做量化評估。本文就是來探討影響 SDK 效能的指標並建立相應的效能模型
【計算機網路】第五章 資料鏈路層(1)
一.資料鏈路層服務 1. 概述 (1)術語 ·主機和路由器:結點 ·連線相鄰結點的通訊通道:鏈路(有線、無線、區域網) ·鏈路層資料分組:幀 (2)資料鏈路層主要任務:通過一條鏈路從一個結點向另一個物理鏈路直接相連的相鄰結點傳送資料報 2. 鏈路層服務 (1)組幀 ·封裝資料