wangjiajinself @ 2023-10-09 20:43:11
#include <iostream>
#include <string>
using namespace std;
string s[1001],a;
int main() {
int n,q,ans=0;
cin>>n>>q;
for(int i=1;i<=n;i++) cin>>s[i];
for(int i=1;i<=q;i++)
{
ans=1;
bool flag=true;
int len;
cin>>len>>a;
for(int j=1;j<=n;j++)
{
if(s[j].size()>=len)
{
if(s[j].substr(s[j].size()-len,s[j].size())==a&&s[j]<=s[ans])
{flag=false;ans=j;}
}
}
if(flag) cout<<"-1"<<endl;
else cout<<s[ans]<<endl;
}
return 0;
}
想问一下是运算符重载不适用了(20行<=)还是别的地方错了
by CCA_zhujunwei @ 2023-10-09 21:07:39
#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 lutaoquan2012 @ 2023-10-10 19:31:10
你这个重载运算符了么@noipquanguojinjiang
by lutaoquan2012 @ 2023-10-10 19:34:19
我用的方法是把他所有的编号存入一个map,然后看他每次查询的能不能通过map里面的某一个元素%10的几次方就可以得到这个数。
你可以试一试这个思路
复杂度我认为应该是
by lutaoquan2012 @ 2023-10-10 19:35:12
代码:你可以试一试
#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 wangjiajinself @ 2023-10-10 20:04:18
@lutaoquan2012 谢谢,我就是疑问c++string类型应该已经重载关系运算符了,不用自己写代码,我就是疑问>=的定义好像和我想象的不一样
by lutaoquan2012 @ 2023-10-10 20:26:38
OK