样例过了,为啥20分?

P3955 [NOIP2017 普及组] 图书管理员

要标记
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


|