为防止广告,目前nocow只有登录用户能够创建新页面。如要创建页面请先登录/注册(新用户需要等待1个小时才能正常使用该功能)。
Sgu/189
来自NOCOW
< Sgu
#include<cstdio> #include<cmath> #include<climits> #include<cstring> #include<string> #include<sstream> #include<iostream> #include<algorithm> #include<map> #include<set> #include<vector> #include<queue> #include<stack> using namespace std; const int maxn=400; typedef long long LL; typedef long double LD; typedef int array[maxn]; int n,m,e; map<string,string>str; string get_name(string line,int &j) { string name; for(j=line.find_first_of('$',j)+1;'A'<=line[j]&&line[j]<='Z'||'a'<=line[j]&&line[j]<='z'||'0'<=line[j]&&line[j]<='9';j++) name+=line[j]; if(!str.count(name)) str[name]=""; j=line.find_first_not_of(' ',j); return name; } string get_substr(string line,int &j,string &name,int &pos,int &len) { string sub; stringstream s; j=line.find_first_of('(',j)+1; name=get_name(line,j); sub=str[name]; j=line.find_first_of(',',j)+1; j=line.find_first_not_of(' ',j); for(;line[j]!=' '&&line[j]!=','&&line[j]!=')';j++) s<<line[j]; s>>pos; if(pos<0) pos+=sub.size(); s.clear(); j=line.find_first_not_of(' ',j); if(line[j]==',') { j++; j=line.find_first_not_of(' ',j); for(;line[j]!=' '&&line[j]!=','&&line[j]!=')';j++) s<<line[j]; s>>len; s.clear(); if(len<0) len=sub.size()+len-pos; } else if(line[j]==')') len=sub.size()-pos; j=line.find_first_of(')',j)+1; j=line.find_first_not_of(' ',j); sub=sub.substr(pos,len); return sub; } int main() { #ifndef ONLINE_JUDGE freopen("data.in","r",stdin); // freopen("data.out","w",stdout); #endif string line; scanf("%d %d\n",&n,&m); for(int i=1;i<=n;i++) { int j=0; string name,value; getline(cin,line); name=get_name(line,j); j=line.find_first_of('"',j)+1; for(;line[j]!='"';j++) value+=line[j]; str[name]=value; } for(int i=1;i<=m;i++) { int j=0; getline(cin,line); j=line.find_first_not_of(' ',j); if(line[j]=='p') { j=line.find_first_of('(',j)+1; j=line.find_first_not_of(' ',j); if(line[j]=='$') cout<<str[get_name(line,j)]<<endl; else if(line[j]=='s') { string name; int pos=0,len=0; cout<<get_substr(line,j,name,pos,len)<<endl; } } else if(line[j]=='$') { string name1=get_name(line,j),name2; j=line.find_first_of('=',j)+1; j=line.find_first_not_of(' ',j); if(line[j]=='$') { name2=get_name(line,j); str[name1]=str[name2]; } else if(line[j]=='s') { int pos=0,len=0; str[name1]=get_substr(line,j,name2,pos,len); } } else if(line[j]=='s') { string name1,name2; int pos1=0,len1=0,pos2=0,len2=0; get_substr(line,j,name1,pos1,len1); j=line.find_first_of('=',j)+1; j=line.find_first_not_of(' ',j); if(line[j]=='$') { name2=get_name(line,j); str[name1].replace(pos1,len1,str[name2]); } else if(line[j]=='s') { get_substr(line,j,name2,pos2,len2); str[name1].replace(pos1,len1,str[name2],pos2,len2); } } } return 0; }