首页 > 代码库 > Astronomical Database
Astronomical Database
Astronomical Database
Time limit: 2.0 second
Memory limit: 64 MB
Memory limit: 64 MB
After the Hubble telescope had been orbited the number of known stars increased. Imagine how it will grow in the future when the mankind masters the hyperspace jump!
The farsighted astronomers want to get ready for that moment right now. They create a control system for a database of all known stars. The database will be multiuser and astronomers all over the world will be able to fill it with useful data. To improve the software‘s usability it‘s necessary to implement the popup prompting: when a new character is typed, the software must suggest the list of stars whose names start with the already typed characters. You are to help astronomers with their cosmic problem and to develop a prototype of the algorithm that will be used in the database control system in the future.
Input
Each input line consists of one operation. The first character denotes the type of the operation. The rest of the characters (small Latin letters or digits) are the operation‘s argument.
The operation types are as follows:
‘+‘ — add a star‘s name to the database. The argument of this operation is the name of the star that is to be added to the database. As the database is multiuser, the information concerning one star may be added several times. When the program is launched, the database contains a single word "sun".
‘?‘ — find all the names that start with the characters given in the operation‘s argument.
There are not more than 10000 operations in the input and all the arguments contain not less than one and not more than 20 characters.
Output
For a given ‘+‘ operation you should output nothing.
For each ‘?‘ operation output a respond to the query: the argument of the operation and then a list of stars‘ names that start with the given characters and that are presented in the database at the moment of the query.
The stars‘ names must be given in the lexicographical order, one in each line without repetitions.
If the length of the resulting list exceeds 20, then you should output the first 20 names only. Each name must be preceded by two spaces as it is shown in the sample (the spaces are replaced with dots in order to make the sample more illustrative).
Sample
input | output |
---|---|
?e+earth+egg?e+eagle+earth?ea | ee..earth..eggea..eagle..earth
|
分析:简单的trie树;
注意一开始就有sun,还有样例的.其实是空格,英语渣了。。。
代码:
#include <iostream>#include <cstdio>#include <cstdlib>#include <cmath>#include <algorithm>#include <climits>#include <cstring>#include <string>#include <set>#include <map>#include <queue>#include <stack>#include <vector>#include <list>#define rep(i,m,n) for(i=m;i<=n;i++)#define rsp(it,s) for(set<int>::iterator it=s.begin();it!=s.end();it++)#define mod 1000000007#define inf 0x3f3f3f3f#define vi vector<int>#define pb push_back#define mp make_pair#define fi first#define se second#define ll long long#define pi acos(-1.0)#define pii pair<int,int>#define Lson L, mid, rt<<1#define Rson mid+1, R, rt<<1|1const int maxn=1e6+10;using namespace std;ll gcd(ll p,ll q){return q==0?p:gcd(q,p%q);}ll qpow(ll p,ll q){ll f=1;while(q){if(q&1)f=f*p;p=p*p;q>>=1;}return f;}int n,m,k,t,id,cnt;struct node{ int to[36],num; char c[30];}a[maxn];char b[maxn];void add(char*p){ int now=0; for(int i=0;p[i];i++) { int x=(p[i]>=‘a‘&&p[i]<=‘z‘)?p[i]-‘a‘+10:p[i]-‘0‘; if(!a[now].to[x])a[now].to[x]=++id; now=a[now].to[x]; } strcpy(a[now].c,p); a[now].num=1;}void dfs(int now){ if(cnt>20)return; if(a[now].num) { if(cnt<=20)printf(" %s\n",a[now].c),cnt++; else return; } for(int i=0;i<=35;i++) { if(a[now].to[i])dfs(a[now].to[i]); }}void gao(char*p){ printf("%s\n",p); int now=0,i; for(i=0;p[i];i++) { int x=(p[i]>=‘a‘&&p[i]<=‘z‘)?p[i]-‘a‘+10:p[i]-‘0‘; if(a[now].to[x])now=a[now].to[x]; else break; } if(!p[i])dfs(now);}int main(){ int i,j; add("sun"); while(~scanf("%s",b)) { if(b[0]==‘+‘) { strcpy(b,b+1); add(b); } else { cnt=1; strcpy(b,b+1); gao(b); } } //system("Pause"); return 0;}
Astronomical Database
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。