#include<bits/stdc++.h>
using namespace std;
int n,q,k;
string cmp(string a,string b)
{
    if(a.size()<b.size())return true;
    if(a.size()>b.size())return false;
    for(int i=0;i<a.size();i++)
        if(a[i]>b[i])return true;
        else if(a[i]>b[i])return false;
    return true;
}
int main()
{
    cin>>n>q;
    for(int i=1;i<=n;i++)
        cin>>s[i];
    sort(s+1,s+1+n,cmp);
    for(int i=1;i<=q;i++)
    {
        cin>>k>>str;
        int ok=1;
        for(int j=1;j<=n;j++)
        {
            int si=s[j].size()-k;
            if(si<0)continue;
            if(s[j].substr(si,k)==str)
            {
                ok=0;
                cout<<s[j]<<endl;
                break;
            }
        }
        if(ok)cout<<"-1"<<endl;
    }
    return 0;
}

问题出哪了???????????

1 条评论

  • 额,这题其实你用数组就可以了,不需要字符串那么烦,还容易出错。只要把数字每一位拆分进行比较就行了。你要不参考一下我的代码,通俗易懂。

    #include<bits/stdc++.h>
    using namespace std;
    int n,q,len,x,a[10005];
    signed main()
    {
        ios::sync_with_stdio(false);
        cin>>n>>q;
        for(int i=1;i<=n;i++)
            cin>>a[i];
        sort(a+1,a+n+1);
        for(int i=1;i<=q;i++)
        {
            cin>>len>>x;bool ok=1;int choose=0;
            for(int j=1;j<=n;j++)
            {
                int check=a[j],xt=x;ok=1;
                while(xt)
                {
                    if(xt%10!=check%10){ok=0;break;}
                    xt/=10,check/=10;
                }
                if(ok){choose=j;break;}
            }
            if(!ok)cout<<-1<<endl;
            else cout<<a[choose]<<endl;
        }
        return 0;
    }
    
    
  • 1

信息

ID
1988
难度
8
分类
(无)
标签
递交数
11
已通过
5
通过率
45%
被复制
3
上传者