4880434_wa.cpp

来自「部分PKU上的源码」· C++ 代码 · 共 162 行

CPP
162
字号
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int n,m;
struct zs
{
	string in,out;
	bool used;
}qz[55],qp[55];
char in[1000];
bool com1(const zs&q1,const zs&q2)
{
	int i;
	bool l1=false,u1=true,f1;
	bool l2=false,u2=true,f2;
	if(q1.in[0]>='A'&&q1.in[0]<='Z') f1=true;
	else f1=false;
	if(q2.in[0]>='A'&&q2.in[0]<='Z') f2=true;
	else f2=false;
	for(i=0;i<q1.in.length();i++) 
	{
		if(q1.in[i]==' ') l1=true;
		if(q1.in[i]>='a'&&q1.in[i]<='z') u1=false;
	}
	for(i=0;i<q2.in.length();i++) 
	{
		if(q2.in[i]==' ') l2=true;
		if(q2.in[i]>='a'&&q2.in[i]<='z') u2=false;
	}
	if(l1&&!l2) return false;
	else if(!l1&&l2) return true;
	else 
	if(u1&&!u2) return false;
	else if(!u1&&u2) return true;
	else 
	if(f1&&!f2) return false;
	else if(!f1&&f2) return true;
	else  return false;
}
bool match(int &count)
{
	int i,j;
	int temp;
	for(i=0;i<n;i++)
	{
		temp=count;
		for(j=0;j<qp[i].in.length();j++)
		{
			if(in[temp]!=qp[i].in[j])
			{
				break;
			}
			else temp++;
		}
		if(j==qp[i].in.length())
		{
			cout<<qp[i].out;
			count+=qp[i].in.length();
			return true;
		}
	}
	for(i=0;i<m;i++)
	{
		temp=count;
		for(j=0;j<qz[i].in.length();j++)
		{
			if(in[temp]!=qz[i].in[j])
			{
				break;
			}
			else temp++;
		}
		if(j==qz[i].in.length()&&!qz[i].used)
		{
			cout<<qz[i].out<<" ("<<qz[i].in<<")";
			qz[i].used=true;
			count+=qz[i].in.length();
			return true;
		}
	}
	return false;
}
int main()
{
	cin>>n>>m;
	int i,j;

	for(i=0;i<n;i++)
	{
		getchar();
		scanf("%[^\n]",in);
		j=0;
		while(in[j]!='\"') j++;
		j++;
		while(in[j]!='\"')
		{
			qp[i].in+=in[j];
			j++;
		}
		j++;
		while(in[j]!='\"') j++;
		j++;
		while(in[j]!='\"')
		{
			qp[i].out+=in[j];
			j++;
		}
	}
	for(i=0;i<m;i++)
	{
		getchar();
		scanf("%[^\n]",in);
		j=0;
		while(in[j]!='\"') j++;
		j++;
		while(in[j]!='\"')
		{
			qz[i].in+=in[j];
			j++;
		}
		j++;
		while(in[j]!='\"') j++;
		j++;
		while(in[j]!='\"')
		{
			qz[i].out+=in[j];
			j++;
		}
		qz[j].used=false;
	}
	stable_sort(qp,qp+n,com1);
	stable_sort(qz,qz+m,com1);
	getchar();
	while(1)
	{
		int state=scanf("%[^\n]",in);
		if(state==EOF)break;
		if(state==0) ;
		else
		if(in[0]=='#') 
		{
			cout<<"#";
			for(i=0;i<m;i++) qz[i].used=false;
		}
		else
		{
			j=0;
			string word;
			while(in[j])
			{
				if(!match(j))
				{
					cout<<in[j];j++;
				}
			}
		}
		getchar();
		cout<<endl;
	}
	return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?