1、输入一字符串,求其最多能排列组合多少种不同的字符串?
string str;
int help(int val);
int main(){
char ch;
while((ch=cin.get())!='\n')
str.push_back(ch);
if(str.size()==0){
cout<<0<<endl;
return 0;
}
//return 0;
int res;
map<char,int> map1;
int count=0;
for(int i=0;i<str.size();i++){
map1[str[i]]++;
}
res=help(str.size());
for(auto iter=map1.begin();iter!=map1.end();iter++){
if(iter->second==1){
continue;
}
int val=help(iter->second);
res/=val;
}
cout<<res<<endl;
return 0;
}
int help(int val){
int res=1;
for(int i=2;i<=val;i++){
res*=i;
}
return res;
}
2、给定一个字符串,和一个数字k,问从字符串删除k个字符,使得删除后的字符串字典序最小,输出该字符串。
string str;
int k;
int main(){
char ch;
while((ch=cin.get())!='\n')
str.push_back(ch);
cin>>k;
int index=0;
int count=0;
while(k){
int start=count;
char min=str[start];
for(int i=count+1;i<=(k+start);i++){
if(str[i]<min){
index=i;
min=str[i];
}
}
k=k-(index-start);
str.erase(start,index-start);
count++;
}
cout<<str<<endl;
return 0;
}
3、给定城市1-N,给定M条路,每条路有四个值,起始城市、到达城市、路长、过路费,求在给定费用下从1到达N的最短路径长度。
输入:
money
城市数量
道路数量
每条道路的属性
输出:最短路径长度,没有输出-1
int max_money;
int city_count;
int road_count;
int min_dis=1000000;
int main(){
int res=-1;
cin>>max_money;
cin>>city_count;
cin>>road_count;
std::vector<std::vector<int> > vec;
for(int i=0;i<road_count;i++){
std::vector<int> v;
int val;
for(int i=0;i<4;i++){
cin>>val;
v.push_back(val);
}
vec.push_back(v);
}
help(vec,1,max_money,0);
if(min_dis==1000000)
cout<<-1<<endl;
else
cout<<min_dis<<endl;
return 0;
}
void help(vector<vector<int>> &vec,int city,int money,int dis){
if(money<0)
return;
if(city==city_count){
min_dis=min_dis<dis?min_dis:dis;
return ;
}
for(auto v:vec){
if(v[0]==city){
help(vec,v[1],money-v[3],dis+v[2]);
}
}
}