求测试数据
查看原帖
求测试数据
798398
shapley楼主2023/2/28 17:46

测了题目自带的样例和uDebug上的数据,都通过了。 但就是WA啊啊。 求大佬赐hack 数据。

#include<bits/stdc++.h>
using namespace std;

#define endl '\n'
multimap<string,int> words;//每篇文章的小写单词map行号(一个单词可对应多个行号)  
map<int,multimap<string,int>> docs_words;//每篇文章编号对应的words表  
vector<string> documents;//按行存原文章  
map<int,vector<string>> documents_No;//原文章map编号  
set<int> rst;
int n;

void INPUT(int s){
	char line[90];
	documents.clear();
	words.clear();
	int rows=0;
	while(1){
		memset(line,0,sizeof(line));
		cin.getline(line,90);
		if(!strcmp(line,"**********")){
			documents_No[s]=documents;
			docs_words[s]=words;
			return;
		} 
		documents.push_back(line);
		for(int i=0;i<strlen(line);++i){
			if(isalpha(line[i])) line[i]=tolower(line[i]);
			else(line[i]=' ');
		}
		stringstream ss;
		ss<<line;
		string word;
		while(ss>>word){
			words.insert({word,rows});
		}
		++rows;
	}	
}

bool search(int a, string s){//a是文章编号
	if (docs_words[a].count(s)){
		auto it=docs_words[a].find(s);
		for(int i=0;i<docs_words[a].count(s);++i){
			rst.insert((*it).second);
			++it;
		}
	}
	return docs_words[a].count(s);
}

void OUTPUT(int a){//a是文章编号
	for(auto it=rst.begin();it!=rst.end();++it){
		cout<<documents_No[a][*it]<<endl;
	}
}

void FIND_WORD(string s){
	int flag=0;
	int first=0; 
	for(int i=0;i<n;++i){
		rst.clear();//保存需要输出的行号
		if(search(i,s)){
			if(first) cout<<"----------"<<endl;
			OUTPUT(i);
			first=1;
			flag=1; 
		}		
	}
	if (!flag)	cout<<"Sorry, I found nothing."<<endl;
	cout<<"=========="<<endl;
} 

void AND(string a, string b){
	int flag=0;
	int first=0; 
	for(int i=0;i<n;++i){
		rst.clear();//保存需要输出的行号
		if(search(i,a)&&search(i,b)){
			if(first) cout<<"----------"<<endl;
			OUTPUT(i);
			first=1;
			flag=1; 
		}		
	}
	if (!flag)	cout<<"Sorry, I found nothing."<<endl;
	cout<<"=========="<<endl;
}

void OR(string a, string b){
	int flag=0;
	int first=0; 
	for(int i=0;i<n;++i){
		rst.clear();//保存需要输出的行号
		if(search(i,a)||search(i,b)){
			if(first) cout<<"----------"<<endl;
			OUTPUT(i);
			first=1;
			flag=1; 
		}		
	}
	if (!flag)	cout<<"Sorry, I found nothing."<<endl;
	cout<<"=========="<<endl;
}

void NOT(string s){
	stringstream ss;string a;
	ss<<s;
	ss>>a>>a; 
	
	int flag=0;
	int first=0; 
	for(int i=0;i<n;++i){
		rst.clear();//保存需要输出的行号
		if(!search(i,a)){
			if(first) cout<<"----------"<<endl;
			for(int j=0;j<documents_No[i].size();++j){
				rst.insert(j);
			}
			OUTPUT(i);
			first=1;
			flag=1; 
		}		
	}
	if (!flag)	cout<<"Sorry, I found nothing."<<endl;
	cout<<"=========="<<endl;
}


int main()
{
	#ifdef LOCAL
		freopen("D:\\life\\学习\\编程\\C++\\算法竞赛入门经典\\5\\data.in", "r", stdin);
	 	freopen("data.out", "w", stdout);
	#endif
	
	//输入文章 
	int m;
	scanf("%d ", &n);
	for(int i=0;i<n;++i){
		INPUT(i);
	}
	
	//输入指令
	scanf("%d ", &m);
	for(int i=0;i<m;++i){
		char s[90];
		cin.getline(s,90);
		string commd=s;
		if(commd[0]=='N')NOT(commd);
		else if((int)commd.find(' ')==-1) FIND_WORD(commd);
		else{
			stringstream ss;
			string a,b,c;
			ss<<commd;
			ss>>a>>b>>c;
			if(b[0]=='A') AND(a,c);
			else OR(a,c);
		}
	}
	 
	return 0;
}	
2023/2/28 17:46
加载中...