瞎写的,求调(悬关
  • 板块灌水区
  • 楼主lxc_why
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/10/11 19:33
  • 上次更新2024/10/11 21:18:58
查看原帖
瞎写的,求调(悬关
1499574
lxc_why楼主2024/10/11 19:33

探险海岛(island)

题目描述:

你去探险海岛,并做好记录,每个岛名之间用“-”隔开,如 xuan-xiao-ma,分别依次探寻到 的三个岛屿 xuan、xiao 和 ma。你知道自己前面已经到过一些岛屿,你想知道这一轮探险能 发现最多多少新的海岛。这一轮有到过的也不属于新发现。如果没有新发现,则输出-1.区 分大小写

输入描述:

第一行:整数 n 第二行:一个字符串,为这轮探险之前的记录的已经到过的海岛。 接下来 n 行:每行一个字符串,为记录的这一轮以此到过的海岛,第 i 行为第 i 次探险。

输出描述:

一行一个整数表示发现最多的新海岛的次序,没有则输出-1。

输入样例:

2 xuan-xiao xuan-da-ma xuan-xiao-ma-xuan

输出样例:

1

解释:

前面探险过的:”xuan“和”xiao“,这一轮第 1 次探险发现两个”da“和”ma“海岛,第 2 次没有 发现新的海岛(ma 第 1 次已经发现了)

数据范围:

0≤n≤1000,1 <=海岛名字长度<= 10000,保证输入只包含大小写和-

接下来,是我想一步写一步的代码,救命!

#include<bits/stdc++.h>
using namespace std;
int n,l=0,sum=0;
string s,S,str;
vector<string> v;
int main() {
	//freopen("number.in","r",stdin); 
	//freopen("number.ans","w",stdout);
    cin>>n>>s;
    for (int i=0;i<s.size();i++){
    	if(s[i]=='-') v[++l]={};
    	else v[l].push_back(s[i]);
	}
    for (int i=1;i<=n;i++){
    	cin>>S;
    	str={ };
    	int cnt=0;
    	for (int j=0;j<S.size();j++){
    		if(S[j]=='-' || j==S.size()-1){
    			int flag=0; 
    			for(int k=0;k<v.size();k++){
    				if(str==v[k]){
    					flag=1;
    					break;
					}
				}
				if(flag==0){
					++l;
	    			v[l]=str;
	    			cnt++;
	    			str={ };
	    		}
			}
    		else {
    			str.push_back(S[j]);
			}
		}
		sum=max(sum,cnt);
	}
	if(sum==0)cout<<-1;
	else cout<<sum;
    return 0;
}

求调求关

2024/10/11 19:33
加载中...