2 条题解
-
2
个人感觉比原题解要好一点
#include<bits/stdc++.h> using namespace std; const int N=1e5+10,M=1e6+10; string s1[N],s2[N]; int main(){ int n,m;scanf("%d%d",&n,&m); for(int i=1;i<=n;i++)cin>>s1[i]; for(int i=1;i<=m;i++)cin>>s2[i]; int l1=1,l2=1,tk=1; string now=s1[1]; while(1){ if(tk==0){ while(l1<=n){ if(s1[l1]>now)break; l1++; } if(l1>n||(s1[l1][0]-now[0])>=2)break; now=s1[l1]; tk=1-tk; } else{ while(l2<=m){ if(s2[l2]>now)break; l2++; } if(l2>m||(s2[l2][0]-now[0])>=2)break; now=s2[l2]; tk=1-tk; } } if(tk==0)printf("Zoe\n"); else printf("Leona\n"); return 0; } -
1
代码好理解,较费时间,自罚不为最优解...
#include<bits/stdc++.h> using namespace std; string a[100005],b[100005]; bool check(string m,string t) { if(m>=t)return 0;//字典序更小,不符合条件 else if(m[0]!=t[0]&&m[0]!=(t[0]-1))return 0; //不满足第一个字符的条件:相同或上一个字母 return 1; } int main() { int n,m;cin>>n>>m; for(int i=1;i<=n;i++)cin>>a[i]; for(int i=1;i<=m;i++)cin>>b[i]; sort(a+1,a+n+1);sort(b+1,b+m+1); for(int i=1,j=1;i<=n||j<=m;) { while(j<=m&&!check(a[i],b[j]))j++;//往后找能接上的单词 if(j>m){cout<<"Leona"<<'\n';break;}//找不到,输了 i++;//下一次只能继续向下接 while(i<=n&&!check(b[j],a[i]))i++; if(i>n){cout<<"Zoe"<<'\n';break;} j++;//同理 } return 0; }
- 1
信息
- ID
- 7104
- 时间
- 1000ms
- 内存
- 512MiB
- 难度
- 6
- 标签
- 递交数
- 29
- 已通过
- 11
- 上传者