1 solutions
-
0
C++ :
#include<cstdio> #include<iostream> #include<algorithm> #include<map> using namespace std; map<string,int> m; typedef map<string,int>::iterator sit; typedef pair<string,int> mypair; string s; sit it; int w,n; int main(){ // ios::sync_with_stdio(false); int i,x; cin>>w>>n; getchar(); for(i=1;i<=w;++i) { getline(cin,s); m.insert( mypair (s,i)); } for(i=1;i<=n;++i){ scanf("%d",&x); getchar(); getline(cin,s); it=m.lower_bound(s); if (it==m.end() || it->first.substr(0,s.size())!=s) cout<<-1<<endl; else{ bool flag=false; x--; while(x--) { it++; if (it==m.end()) { cout<<-1<<endl; flag=true; break; } } if (flag)continue; if (it->first.substr(0,s.size())==s) { cout<<it->second<<endl;} else cout<<-1<<endl; } } }Pascal :
var a:array[0..35005] of ansistring; b:array[0..35005] of longint; n,m:longint; procedure init; var i,j,t:longint; t1:ansistring; begin readln(n,m); for i:=1 to n do begin readln(a[i]); b[i]:=i; end; end; procedure qsort(ll,rr:longint); var i,j,t:longint; t1,x:ansistring; begin i:=ll;j:=rr;x:=a[(ll+rr)>>1]; repeat while a[i]<x do inc(i); while a[j]>x do dec(j); if i<=j then begin t1:=a[i];a[i]:=a[j];a[j]:=t1; t:=b[i];b[i]:=b[j];b[j]:=t; inc(i);dec(j); end; until i>j; if ll<j then qsort(ll,j); if i<rr then qsort(i,rr); end; function find(ll,rr:longint;tt:ansistring):longint; var mid:longint; begin if ll=rr then exit(ll); if ll=rr-1 then begin if a[ll]>=tt then exit(ll); exit(rr); end; mid:=(ll+rr)>>1; if a[mid]>=tt then exit(find(ll,mid,tt)) else exit(find(mid+1,rr,tt)); end; procedure main; var i,j,x,yy:longint; tt:ansistring; ww:char; begin qsort(1,n); for i:=1 to m do begin read(x); read(ww); readln(tt); yy:=find(1,n,tt); if pos(tt,a[yy])=1 then begin yy:=yy+x-1; if pos(tt,a[yy])=1 then writeln(b[yy]) else writeln(-1); end else begin writeln(-1); continue; end; end; end; begin init;main; end.
- 1
Information
- ID
- 16570
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- (None)
- Tags
- # Submissions
- 0
- Accepted
- 0
- Uploaded By