求助大佬

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

``` #include <iostream> #include <cstdio> #include <algorithm> using namespace std; long long b[1010],xx[1010],tmp[1010],xc[1010],n,q; int main(){ cin>>n>>q; for (int i = 1;i <= 1000;i++) tmp[i] = 1; for (int i = 1;i <= n;i++) cin >> b[i]; sort(b, b + n + 1); for (int i = 1;i <= q;i++){ cin >> xc[i] >> xx[i]; for (int j = 1;j <= xc[i];j++) tmp[i] *= 10; } for (int i = 1;i <= q;i++){ for (int j = 1;j <= n;j++){ if (b[j] % tmp[i] == xx[i]){ cout<<b[j]<<endl; break; } else if (j==n){ cout<<"-1"<<endl; break; } } } return 0; } ```
by CCA_zhujunwei @ 2023-10-09 21:07:39


你这个重载运算符了么@[noipquanguojinjiang](/user/873786)
by lutaoquan2012 @ 2023-10-10 19:31:10


我用的方法是把他所有的编号存入一个map,然后看他每次查询的能不能通过map里面的某一个元素%10的几次方就可以得到这个数。 你可以试一试这个思路 复杂度我认为应该是$o(n*q*7)$大约是$o(n*q)$的复杂度,数据不大,可以过
by lutaoquan2012 @ 2023-10-10 19:34:19


代码:你可以试一试 ```cpp #include<bits/stdc++.h> using namespace std; typedef long long ll; ll n,q,x,y; map<ll,ll> mp; int main(){ cin>>n>>q; for(int i=1;i<=n;i++){ cin>>x; mp[x]++; } for(int i=1;i<=q;i++){ cin>>x>>y; bool flag=true; for(auto j:mp){ if(flag==false) break; for(int k=1;k<=10000000;k*=10) if(j.first%k==y){ cout<<j.first<<endl; flag=false; break; } } if(flag==true) cout<<"-1"<<endl; } return 0; } ```
by lutaoquan2012 @ 2023-10-10 19:35:12


@[lutaoquan2012](/user/952033) 谢谢,我就是疑问c++string类型应该已经重载关系运算符了,不用自己写代码,我就是疑问>=的定义好像和我想象的不一样
by noipquanguojinjiang @ 2023-10-10 20:04:18


OK
by lutaoquan2012 @ 2023-10-10 20:26:38


|