这是根据我自己的想法写的算法,请各位品评品评
Problem K
#include<iostream>
#include<algorithm>
using namespace std;
#define g 100000
//结构体
typedef struct {
char ak[g];
int b;
}ss;
ss chuan[100000];
//遍历s字符串是否符合k字符串的要求
int chack(char k[],char s[]){
int j=0;
sort(k,k+strlen(k));//strlen()求字符数组的长度
sort(s,s+strlen(s));
for(int l=0;l<strlen(s)&&j<strlen(k);j++)
{
if(s[l]=k[j]) l++;
}
if(l==strlen(s))return 1;
else return 0;
}
//对符合的字符串进行排序的函数,如果字符串长度一样,则输入时最先输入的字符串先输出
bool cmp(ss yi,ss er){
if(strlen(yi.ak)>strlen(er.ak))return true;
if(strlen(yi.ak)==strlen(er.ak)&&yi.b<er.b)return true;
return false;
}
int main() {
int u=1;
int n;
char s[g],k[g],h[g];
cin>>k;
cin>>n;
for (int i=1;i<=n;i++){
cin>>s;
strcpy(h,s);//一个字符串常量或者字符数组不能直接赋给字符数组,要用strcpy复制过去,数组不能直接赋值,只能用strcpy函数来复制过去
if(chack(k,s))
{
strcpy(chuan[u].ak,h);
chuan[u].b=u;
u++;
}
}
sort(chuan+1,chuan+u,cmp);
cout<<chuan[1].ak<<endl;
return 0;
}