CCF 201809-3 元素选择器




我的代码:

#include<iostream>
#include<cstdio>
#include<cmath>
#include<string.h>
using namespace std;

//此题得分50分 
int main(){
	
	int doc,choose,row=-1;
	int i,j,k;
	char str1[105][85]={0},c;
	char str2[15][85]={0};
	char temp[85];
	int value=0;
	int mark[105]={0},p=0,result[105];
	char *tear,tear_num=0,part=0;
	
//	freopen("aaa.txt","r",stdin);
	scanf("%d %d",&doc,&choose);
	c=getchar();
	for(i=0;i<doc;i++){
		gets(str1[i]);
	}
	for(j=0;j<choose;j++){
		gets(str2[j]);
	}

	for(i=0;i<choose;i++){
		value=0;
		p=0;
		for(j=0;j<doc;j++){
			if(strstr(str1[j],str2[i])!=NULL){
				value++;
				mark[p++]=j+1;
			}
		}
		if(value!=0){
			printf("%d",value);
			for(k=0;k<value;k++){
				printf(" %d",mark[k]);
			}
		}else if(value==0){
			//此处存在两种情况
			strcpy(temp,str2[i]);
			tear_num=0;
			tear=strtok(str2[i]," ");
			while(tear!=NULL){
				tear_num++;
				tear=strtok(NULL," ");
			}
			if(tear_num==1){
				printf("%d",value);
			}else if(tear_num>=1){
//				printf("%d",value);
//				printf("%d",tear_num);
//				printf("%s ",temp);
				row=-1;
				tear=strtok(temp," ");
				part=0;
				value=0;
				p=0;
				while(tear!=NULL){
					part++;
					for(j=0;j<doc;j++){
						if(strstr(str1[j],tear)!=NULL){
							if((j+1)>row && part!=tear_num){
								row=j+1;
								break;
								//printf("row=%d\n",row);
							}else if((j+1)>row && part==tear_num){
								value++;
//								printf(" %d",j+1);
								result[p++]=j+1;
							}
						}
					}
					tear=strtok(NULL," ");
				}
				printf("%d",value);
				for(k=0;k<p;k++){
					printf(" %d",result[k]);
				}
			}
		}
		printf("\n");
	}
	
	return 0;
} 
发布了25 篇原创文章 · 获赞 8 · 访问量 4499

猜你喜欢

转载自blog.csdn.net/weixin_42414405/article/details/88429867