3 solutions

  • 0
    @ 2026-10-2 9:27:12
    #include<bits/stdc++.h>
    using namespace std;
    string s1,o[305],s[50005];
    int n;
    bool cmp(string a,string b){
    	for(int i=0;i<a.size()&&i<b.size();i++){
    		if(a[i]!=b[i]) return o[a[i]]<o[b[i]];
    	}
    	return a.size()<b.size();
    }
    int main()
    {
    	cin>>s1;
    	for(int i=1;i<=s1.size();i++){
    		o[s1[i]]=i;
    	}
    	cin>>n;
    	for(int i=1;i<=n;i++){
    		cin>>s[i];
    	}
    	sort(s+1,s+n+1,cmp);
    	for(int i=1;i<=n;i++){
    		cout<<s[i]<<endl;
    	}
    	return 0;
    }
    
    • 0
      @ 2025-6-5 16:46:01

      本题的核心在于实现一个自定义的字典序排序,我们可以使用Lambda表达式进行自定义排序规则

      匿名函数的写法

      #include<bits/stdc++.h>
      using namespace std;
      const int N=50010;
      string s[N];
      int order[300];
      int main()
      {	
      	string s1;
      	int n;
      	cin>>s1>>n;
      	for(int i=0;i<s1.size();i++)//遍历整个序列 
      	{
      		order[s1[i]]=i;	
      	} 
      	for(int i=0;i<n;i++) //输入需要排序的字符串 
      	{
      		cin>>s[i];
      	}
      	sort(s,s+n,[&](string a,string b){ //将a和b按照给定的顺序排序 
      		for(int i=0;i<a.size()&&i<b.size();i++)
      		{
      			if(a[i]!=b[i]) return order[a[i]]<order[b[i]];
      		}
      		return a.size()<b.size();
      	});
      	for(int i=0;i<n;i++)
      	{
      		cout<<s[i]<<endl;
      	}
      	return 0;
      }
      
      
      
      

      自定义函数的写法

      #include<bits/stdc++.h>
      using namespace std;
      const int N=50010;
      string s[N];
      int order[300];
      bool cmp(string a,string b)
      {
      	for(int i=0;i<a.size()&&i<b.size();i++)
      	{
      		if(a[i]!=b[i]) return order[a[i]]<order[b[i]];
      	}
      	return a.size()<b.size();
      }
      int main()
      {	
      	string s1;
      	int n;
      	cin>>s1>>n;
      	for(int i=0;i<s1.size();i++)//遍历整个序列 
      	{
      		order[s1[i]]=i;	
      	} 
      	for(int i=0;i<n;i++) //输入需要排序的字符串 
      	{
      		cin>>s[i];
      	}
      	sort(s,s+n,cmp);//将字符串按照给定的规则排序
      	for(int i=0;i<n;i++)
      	{
      		cout<<s[i]<<endl;
      	}
      	return 0;
      }
      
      
      
      • -1
        @ 2026-9-28 13:24:59
        #include<bits/stdc++.h>
        using namespace std;
        const int N=50010;
        string s[N];
        int order[300];
        bool cmp(string a,string b)
        {
        	for(int i=0;i<a.size()&&i<b.size();i++)
        	{
        		if(a[i]!=b[i]) return order[a[i]]<order[b[i]];
        	}
        	return a.size()<b.size();
        }
        int main()
        {	
        	string s1;
        	int n;
        	cin>>s1>>n;
        	for(int i=0;i<s1.size();i++)//遍历整个序列 
        	{
        		order[s1[i]]=i;	
        	} 
        	for(int i=0;i<n;i++) //输入需要排序的字符串 
        	{
        		cin>>s[i];
        	}
        	sort(s,s+n,cmp);//将字符串按照给定的规则排序
        	for(int i=0;i<n;i++)
        	{
        		cout<<s[i]<<endl;
        	}
        	return 0;
        }
        
        
        
        • 1

        Information

        ID
        2617
        Time
        1000ms
        Memory
        256MiB
        Difficulty
        3
        Tags
        # Submissions
        12
        Accepted
        6
        Uploaded By