时间限制: | 1.0s |
内存限制: | 256.0MB |
问题描述: | 问题描述 成成最近在搭建一个网站,其中一些页面的部分内容来自数据库中不同的数据记录,但是页面的基本结构是相同的。例如,对于展示用户信息的页面,当用户为 Tom 时,网页的源代码是 输入格式 输入的第一行包含两个整数 m, n,分别表示模板的行数和模板生成时给出的变量个数。 输出格式 输出包含若干行,表示模板生成的结果。 样例输入 11 2 样例输出 <!DOCTYPE html> 评测用例规模与约定 0 ≤ m ≤ 100 |
emmm...,改到了80看不出猫腻了,重写一遍。。
#include<bits/stdc++.h>
#define MAX 150005
#define MOD 1000000007
typedef long long LL;
//const int INF = 1e9+7;
#define VM 1000010
using namespace std;
#define inf 0.00000001
struct node
{
int op;
double cost;
LL num;
int use;
} piao[5005],buy[5005],sell[5005];
bool cmp1(node a,node b) //由大到小
{
return (a.cost-b.cost)>inf;
}
bool cmp2(node a,node b) //由小到大
{
return (b.cost-a.cost)>inf;
}
string key[205],tmpstr[205],mostr[205];
map<string,string> mp;
int main()
{
int m,n,i,j,k;
string t1,t2,str;
cin>>m>>n;
getchar();
for(i=0; i<m; i++)
getline(cin,tmpstr[i]);
for(i=0; i<n; i++)
{
getline(cin,key[i]);
t1="",t2="";
for(j=0; key[i][j]!=' '; j++)
t1+=key[i][j];
for(k=j+2; key[i][k]!='"'; k++)
t2+=key[i][k];
mostr[i]=t1;
mp[t1]=t2;
}
string tmp,tmp2;
int pos,st,ed,flag,cnt;
for(i=0; i<m; i++)
{
//str="";
//flag=0;
//cnt=0;
//tmp2=tmpstr[i];
for(j=0; j<n; j++)
{
str="";
tmp = "{{ "+mostr[j]+" }}";
if(tmpstr[i].find(tmp)!=tmpstr[i].npos)
{
st=0;
while((pos=tmpstr[i].find(tmp))!=tmpstr[i].npos)
{
ed=pos;
for(k=st; k<ed; k++)str+=tmpstr[i][k];
//cout<<str;
//for(k=0;k<mp[mostr[j]].length();k++)
str+=mp[mostr[j]];
//cout<<str;
st=pos+tmp.length();
string tt="";
for(k=0; k<tmp.length(); k++)tt+="*";
tmpstr[i]=tmpstr[i].replace(pos,tmp.length(),tt);
}
for(k=st; k<tmpstr[i].length(); k++)str+=tmpstr[i][k];
//tmpstr[i]=tmp2;
tmpstr[i]=str;
//cout<<str<<endl;
//break;
//flag=1;
}
}
/*if(flag){
for(j=0;j<str.length();j++){
if(str[j]!='{')cout<<str[j];
else{
while(str[j]!='}'){
j++;
}
j+=2;
}
}
cout<<endl;
}
else {*/
for(j=0; j<tmpstr[i].length(); j++)
{
if(tmpstr[i][j]!='{')cout<<tmpstr[i][j];
else
{
while(tmpstr[i][j]!='}')
{
j++;
}
j+=1;
}
}
cout<<endl;
// }
}
return 0;
}
醉了,重写就100了。。。而且之前麻麻烦烦写那一堆干嘛
#include<bits/stdc++.h>
#define MAX 150005
#define MOD 1000000007
typedef long long LL;
//const int INF = 1e9+7;
#define VM 1000010
using namespace std;
#define inf 0.00000001
struct node
{
int op;
double cost;
LL num;
int use;
} piao[5005],buy[5005],sell[5005];
bool cmp1(node a,node b) //由大到小
{
return (a.cost-b.cost)>inf;
}
bool cmp2(node a,node b) //由小到大
{
return (b.cost-a.cost)>inf;
}
string key[205],tmpstr[205],mostr[205];
map<string,string> mp;
int main()
{
int m,n,i,j,k;
string t1,t2,str;
cin>>m>>n;
getchar();
for(i=0; i<m; i++)
getline(cin,tmpstr[i]);
for(i=0; i<n; i++)
{
getline(cin,key[i]);
t1="",t2="";
for(j=0; key[i][j]!=' '; j++)
t1+=key[i][j];
for(k=j+2; key[i][k]!='"'; k++)
t2+=key[i][k];
mostr[i]=t1;
mp[t1]=t2;
}
string tmp,tmp2;
int pos,st,ed,flag,cnt;
for(i=0; i<m; i++)
{
pos=-1;
cnt=0;
tmp="";
for(j=0;j<tmpstr[i].length();j++){
if(tmpstr[i][j]=='{'&&tmpstr[i][j+1]=='{'&&pos==-1){
pos=j;
j+=2;
}
else if(pos!=-1&&tmpstr[i][j]!=' '){
tmp+=tmpstr[i][j];
}
else if(pos!=-1&&tmpstr[i][j]==' '){
cout<<mp[tmp];
pos=-1;
tmp="";
j+=2;
}
else cout<<tmpstr[i][j];
}
cout<<endl;
}
return 0;
}