要标记
by shimingxin1007 @ 2024-03-06 22:17:33
@[shimingxin1007](/user/1021064) 不用标记
by sll00 @ 2024-03-06 23:32:35
@[13860121259AaBb](/user/1264600) 可以参考一下我的做法我用字符串查找来处理
```cpp
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
#define pii pair<int,int>
#define mp make_pair
#define st string
#define vint vector<int>
#define vll vector<ll>
#define For(i,l,r) for(int i=(int)(l);i<=(int)(r);i++)
#define Refor(i,r,l) for(int i=(int)(r);i>=(int)(l);i--)
#define pb push_back
#define maxn 1005
struct test
{
int s;
st num;
}brr[maxn];
st arr[maxn];
ll krr[maxn];
bool cmp1(test o,test p)
{
if(o.num.size()==p.num.size())
{
return o.num<p.num;
}
else
{
return o.num.size()<p.num.size();
}
}
bool cmp(st o,st p)
{
if(o.size()==p.size())
{
return o<p;
}
else
{
return o.size()<p.size();
}
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
int n,q;
cin>>n>>q;
For(i,1,n)
{
cin>>arr[i];
krr[i]=0;
}
bool flag=false;
For(i,1,q)
{
cin>>brr[i].s>>brr[i].num;
}
sort(arr+1,arr+1+n,cmp);
For(i,1,q)
{
flag=false;
For(j,1,n)
{
if(arr[j].rfind(brr[i].num)!=arr[j].npos&&arr[j].size()>=brr[i].num.size()&&arr[j].rfind(brr[i].num)==arr[j].size()-brr[i].s)
{
cout<<arr[j]<<endl;
flag=true;
break;
}
}
if(flag==false)
{
cout<<-1<<endl;
}
}
return 0;
}
```
by sll00 @ 2024-03-06 23:34:29
@[sll00](/user/1243869) 我是萌新,这样的做法我看不懂,麻烦加些注释
by 13860121259AaBb @ 2024-03-07 13:21:36
@[13860121259AaBb](/user/1264600) 我的大致思路就是,输入完后依据编号大小来排序,(长度相同直接比较,不相同长的为大的编号)。排好序(主要是按字典序输出),然后一个暴力遍历一遍就好了。
最主要还是要注意那个读者编号是那个书的后几位编号!希望有帮助
by sll00 @ 2024-03-07 21:16:33