山東省第一屆ACM大學生程式設計競賽 Phone Number 字典樹
Phone Number
Time Limit: 1000ms Memory limit: 65536K 有疑問?點這裡^_^
題目描述
We know that if a phone number A is another phone number B’s prefix, B is not able to be called. For an example, A is 123 while B is 12345, after pressing 123, we call A, and not able to call B.Given N phone numbers, your task is to find whether there exits two numbers A and B that A is B’s prefix.
輸入
The input consists of several test cases.The first line of input in each test case contains one integerN (0<N<1001), represent the number of phone numbers.
The next line containsN integers, describing the phone numbers.
The last case is followed by a line containing one zero.
輸出
For each test case, if there exits a phone number that cannot be called, print “NO”, otherwise print “YES” instead.示例輸入
2 012 012345 2 12 012345 0
示例輸出
NO YES
提示
來源
2010年山東省第一屆ACM大學生程式設計競賽水題字典樹,判斷是否有字首號碼出現
ACcode:
#include <map> #include <queue> #include <cmath> #include <cstdio> #include <cstring> #include <stdlib.h> #include <iostream> #include <algorithm> #define MAX 10 #define maxn 1005 using namespace std; struct Trie{ Trie* next[MAX]; int v; }; struct STR{ char str[maxn]; int len; bool operator<(const STR &a)const{ return (this->len<a.len); } }my[maxn]; Trie *root; int n,ans,num; void createTire(char *str){ int len=strlen(str); Trie *p=root,*q; for(int i=0;i<len;++i){ int id=str[i]-'0'; if(p->next[id]==NULL){ q=(Trie *)malloc(sizeof(Trie)); q->v=1; for(int j=0;j<MAX;++j) q->next[j]=NULL; p->next[id]=q; p=p->next[id]; } else{ p->next[id]->v++; p=p->next[id]; } } p->v=-1; } int findTrie(char *str){ int len=strlen(str); Trie *p=root; for(int i=0;i<len;++i){ int id=str[i]-'0'; p=p->next[id]; if(p==NULL) return 0; if(p->v==-1) return 0; } return 2; } void init(){ root=(Trie *)malloc(sizeof(Trie)); for(int i=0;i<MAX;++i) root->next[i]=NULL; ans=num=0; memset(my,0,sizeof(my)); } int main(){ while(~scanf("%d",&n)&&n){ init(); for(int i=0;i<n;++i){ scanf("%s",my[i].str); my[i].len=strlen(my[i].str); } sort(my,my+n); for(int i=0;i<n;++i)createTire(my[i].str); // for(int i=0;i<n;i++)cout<<my[i].str<<'\12'; for(int i=0;i<n;++i) ans+=findTrie(my[i].str); //cout<<"ans: "<<ans<<'\12'; for(int i=0;i<n&&!ans;++i) for(int j=i+1;j<n;++j) if(!strcmp(my[i].str,my[j].str)) ans++; printf(ans>0?"NO\n":"YES\n"); } return 0; } /* 2 012 012345 2 12 012345 0 */
暴力做法
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <string>
#include <vector>
#define maxn 1005
#define inf 0x7fffffffff
#define ll long long
using namespace std;
int n,m,loop;
struct N {
char s[maxn];
int len;
}my[maxn];
bool cmp(N a,N b){return a.len<b.len;}
int len[maxn];
int main(){
while(scanf("%d",&n)&&n){
for(int i=1;i<=n;++i){
scanf("%s",my[i].s);
my[i].len=strlen(my[i].s);
}
sort(my+1,my+1+n,cmp);
bool flag=true;
for(int i=1;flag&&i<=n;++i)
for(int j=i+1;flag&&j<=n;++j){
int ok=0;
for(int z=0;z<my[i].len;++z)
if(my[i].s[z]==my[j].s[z])ok++;
if(ok==my[i].len)flag=false;
}
if(flag)puts("YES");
else puts("NO");
}
return 0;
}
相關推薦
山東省第一屆ACM大學生程式設計競賽 Phone Number 字典樹
Phone Number Time Limit: 1000ms Memory limit: 65536K 有疑問?點這裡^_^ 題目描述 We know that if a phone number A is another phone number B’s
2010年山東省第一屆ACM大學生程式設計競賽——Greatest Number
Greatest Number 題目意思:給你一串數,任取四個,可以重複,求最大值,但不能超過m。 可以先將任意兩個數相加,然後再二分查詢求出符合題意的最大值即可。 #include<i
[2010山東省第一屆ACM大學生程式設計競賽]——Hello World!
Hello World!題目描述 We know that Ivan gives Saya three problems to solve (Problem F), and this is the first problem. “We need a programmer t
“浪潮杯”山東省第八屆ACM大學生程式設計競賽I
Fascinated with the computer games, Gabriel even forgets to study. Now she needs to finish her homework, and there is an easy problem: f(n)= She is requir
2015年山東省第六屆ACM大學生程式設計競賽-B-Lowest Unique Price
Link: http://www.sdutacm.org/sdutoj/problem.php?action=showproblem&problemid=3252 Lowest Unique Price Time Limit: 1000ms
SDUT 3258 Square Number(2015年山東省第六屆ACM大學生程式設計競賽)
Square Number Time Limit: 1000ms Memory limit: 65536K 有疑問?點這裡^_^ 題目描述 In mathematics,
“浪潮杯”山東省第八屆ACM大學生程式設計競賽 J
sell goods whose price with order as -1, 5, 6, 6, the total benefit would be -1*1 + 5*2 + 6*3 + 6*4 = 51. 01 #include <iostream>
山東省第七屆ACM大學生程式設計競賽 總結
很惋惜的一場比賽,比賽前我想了很多個結局,可能是銀牌中等,銀牌末尾,要是運氣好的可能能混一個金牌回來。。但是銀首這個真的是超乎我意料之外。。。 開始比賽的不久我就看到了K題,一個作為簽到題的存在,開始習慣性的先敲輸入輸出。寫完輸入輸出之後感覺沒有比較好寫的思路
Fruit Ninja II(山東省第三屆ACM大學生程式設計競賽 )
Have you ever played a popular game named "Fruit Ninja"? Fruit Ninja (known as Fruit Ninja HD on the iPad and Fruit Ninja THD for Nvidia Tegra 2 based A
山東省第三屆ACM大學生程式設計競賽 Fruit Ninja I(01揹包)
01揹包 加上vector的運用,貪心sort排序 #include <stdio.h> #include <vector> #include <string.h>
“浪潮杯”山東省第九屆ACM大學生程式設計競賽
目錄 題目描述 輸入描述: 輸出描述: 輸入 輸出 解析: 程式碼: 題目描述 輸入描述: 輸出描述: 輸入 輸出 題目描述 輸入描述: 輸出描述: 輸入 輸出 題目描述 輸入描述: 輸出描述: 輸入 輸出 題
“浪潮杯”山東省第九屆ACM大學生程式設計競賽 F Four-tuples (容斥原理)
題目連結 比賽時推了好久的容斥,結果推錯了,過了樣例就交了,然後A了。後來才知道這題有bug。菜啊。 題意:給定四個區間(li,ri)(li,ri)(閉區間),求一個四元組(x1,x2,x3,x4)(x1,x2,x3,x4),滿足xixi在區間(li,ri)
2017河南省第十屆ACM大學生程式設計競賽總結
河南第十屆大學生程式設計競賽總結 比賽過程隊友部落格有記錄:http://blog.csdn.net/dreamNYC/article/details/71417450 主要就總結下這次比賽的感受: 我們隊雖然和
“浪潮杯”第九屆山東省ACM大學生程式設計競賽重現賽 題解
點選轉到(牛客網) 1.思路: 給定兩個字串,假設是ELLY與KRIS,E到K是6,L到R是6,當第二個L到I時,L是比I大的,此時L就要繞到Z,從Z到A,再從A開始到I,這樣長度就是23,Y到S同理,長度是20;這樣找完之後序列長度之和就是6 +6+23
2018山東省ACM大學生程式設計競賽B.Bullet
In GGO, a world dominated by gun and steel, players are fighting for the honor of being the strongest gunmen. Player Shino is a sniper, and her aimed shot
“浪潮杯”第九屆山東省ACM大學生程式設計競賽 D-Dance
來源:牛客網題意:在根節點為0的樹上(編號:0,1,2...n)。一條邊上有兩個值 poweri ,numi,相當於網路流:poweri相當於路上的cost,numi相當於容量,相當於匯點為0,源點為所有葉子節點,求最大費用。樣例:70 100 01 2 32 2 51 5
“浪潮杯”第九屆山東省ACM大學生程式設計競賽重現賽 G game (尼姆博弈)
題目描述 Alice and Bob are playing a stone game. There are n piles of stones. In each turn, a player can remove some stones from a pile (th
Emergency(山東省第一屆ACM程序設計真題+Floyd算法變型)
prev eno lead 解題思路 ats next gen book lin 題目描述 Kudo’s real name is not Kudo. Her name is Kudryavka Anatolyevna Strugatskia, and Kudo is o
第八屆福建省大學生程式設計競賽-FZU 2280 HASH處理+暴力搜尋
題目:Problem 2280 Magic Problem Description Kim is a magician, he can use n kinds of magic, number from 1 to n. We use string Si to describe m
第八屆福建省大學生程式設計競賽-FZU 2277 DFS +線段樹+讀入掛
FZU 2277 Problem 2277 Change Accept: 245 Submit: 1186 Time Limit: 2000 mSec Memory Limit : 262