求助大佬

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

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的几次方就可以得到这个数。 你可以试一试这个思路 复杂度我认为应该是o(n*q*7)大约是o(n*q)的复杂度,数据不大,可以过


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


|