1 条题解
-
0
自动搬运
来自洛谷,原作者为

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
- 上传者