1 条题解

  • 0
    @ 2025-8-24 22:51:19

    自动搬运

    查看原文

    来自洛谷,原作者为

    avatar Gaoyx
    祈求上帝给你开一扇窗时,你已经输了

    搬运于2025-08-24 22:51:19,当前版本为作者最后更新于2023-10-12 20:03:07,作者可能在搬运后再次修改,您可在原文处查看最新版

    自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多

    以下是正文


    这是本蒟蒻的第一篇题解,有错误请指出。

    小知识 : sort 排序字符串默认是按字典序排序的。

    思路 : 将 Leona 和 Zoe 的单词排好序后,每次寻找 Leona 和 Zoe 是否有单词可说,若没有就输出赢家, 若有就继续循环。

    附代码:

    #include<bits/stdc++.h>
    using namespace std;
    int n , m;
    string l[100001], z[100001];
    int lmi = 2, zmi = 1;
    /*
    	lmi:lmi每次存Leona说出单词位置,再从lmi找到n,
    	因为lmi之前要比现在说出单词要小,所以没必要找。 
    	zmi: 同理。 
    */
    int ansl = 1, ansz = 1;
    /*
    	ansl:记入Leona是否还能说出单词。 
    	ansz:记入Zoe是否还能说出单词。 
    */
    string nowl, nowz;
    /*
    	nowl:记入Leona说出的单词的最后一个。 
    	nowz:记入Zoe出的单词的最后一个。 
    */
    int main()
    {
    	cin >> n >> m;
    	for(int i=1;i<=n;i++)
    	{
    		cin >> l[i];
    	}
    	for(int i=1;i<=m;i++)
    	{
    		cin >> z[i];
    	}
    	sort(l+1,l+n+1);
    	sort(z+1,z+m+1);// 排序 
    	nowl = l[1];
    	while(ansl&&ansz)//其中一个没有答案就跳出 
    	{
    		ansl = ansz = 0;
    		for(int i=zmi;i<=m;i++)
    		{
    			char w = nowl[0] + 1;
    			if((z[i][0] == nowl[0]&&z[i] > nowl)||(w == z[i][0]))
    			{
    				nowz = z[i];//如果Zoe可以说就更新nowz,zmi,ansz。 
    				zmi = i + 1;
    				ansz = 1;
    				break;
    			}
    		}
    		if(!ansz)
    		{
    			ansl = 1;
    			break;
    		}
    		for(int i=lmi;i<=n;i++)
    		{
    			char w = nowz[0] + 1;
    			if((l[i][0] == nowz[0]&&l[i] > nowz)||(l[i][0] == w))
    			{
    				nowl = l[i];//如果Leona可以说就更新nowl,lmi,ansl。 
    				lmi = i + 1;
    				ansl = 1;
    				break;
    			}
    		}
    		if(!ansl)
    		{
    			ansz = 1;
    			break;
    		}
    	}
    	if(!ansz) cout << "Leona";
    	else cout << "Zoe";
    	return 0;//功德圆满 
    } 
    
    • 1

    信息

    ID
    9274
    时间
    1000ms
    内存
    512MiB
    难度
    3
    标签
    递交数
    0
    已通过
    0
    上传者