链接:https://ac.nowcoder.com/acm/contest/6218/A
来源:牛客网
题目描述
给定一个只包含小写字母的字符串s,牛牛想将这个字符串中的所有’a’字母全部移动到字符串的末尾,而且保证其它字符的相对顺序不变。其中字符串s的长度<=1e6。
示例1
输入
复制
“abcavv”
输出
复制
“bcvvaa”
class Solution {
public:
/**
*
* @param s string字符串
* @return string字符串
*/
string change(string s) {
string s2="";
int ans=0;
for(int i=0;i<s.size();i++){
if(s[i]=='a')ans++;
else s2+=s[i];
}
for(int i=0;i<ans;i++){
s2+='a';
}
return s2;
}
};
B
链接:https://ac.nowcoder.com/acm/contest/6218/B
来源:牛客网
题目描述
题意:
一天,牛妹找牛牛做一个游戏,牛妹给牛牛写了一个数字n,然后又给自己写了一个数字m,她希望牛牛能执行最少的操作将他的数字转化成自己的。
操作共有三种,如下:
1.在当前数字的基础上加一,如:4转化为5
2.在当前数字的基础上减一,如:4转化为3
3.将当前数字变成它的平方,如:4转化为16
你能帮牛牛解决这个问题吗?
输入:
给定n,m,分别表示牛牛和牛妹的数字。
输出:
返回最少需要的操作数。
示例1
输入
复制
3,10
输出
复制
2
class Solution {
public:
/**
* 返回最后要输出的答案
* @param n int整型 表示牛牛的数字
* @param m int整型 表示牛妹的数字
* @return int整型
*/
int solve(int n, int m) {
// write code here
struct node{
int x,step;
node(int x,int step):x(x),step(step){}
};
queue<node>q;
int vis[100005];
memset(vis,0,sizeof(vis));
q.push(node(n,0));
vis[n]=1;
int res=0;
while(!q.empty()){
node u=q.front();
q.pop();
if(u.x==m){
res=u.step;
break;
}
if(u.x+1<=m&&!vis[u.x+1]){
vis[u.x+1]=1;
q.push(node((u.x+1),(u.step+1)));
}
if(u.x-1>=0&&!vis[u.x-1]){
vis[u.x-1]=1;
q.push(node((u.x-1),(u.step+1)));
}
if(u.x*u.x<=10000&&!vis[u.x*u.x]){
vis[u.x*u.x]=1;
q.push(node((u.x*u.x),(u.step+1)));
}
}
return res;
}
};
链接:https://ac.nowcoder.com/acm/contest/6218/C
来源:牛客网
题目描述
众所周知,牛妹要组织公司的出游。要准备面包和饮料。她买到的面包和饮料都是捆绑销售的,也就是说,一个大包装里面x个面包+y个饮料,花费t元。
为了满足公司的要求,需要一定数量的面包和饮料。
你的任务就是帮助牛妹计算,为了满足公司需要,一共最少花费多少钱。
示例1
输入
复制
5,60,[[3,36,120],[10,25,129],[5,50,250],[1,45,130],[4,20,119]]
输出
复制
249
备注:
每种大包装只能最多买一个,所需面包breadNum、饮料的总量beverageNum均不超过2000
牛妹一定能找到满足要求的方案让大家能够出游。
class Solution {
public:
/**
*
* @param breadNum int整型
* @param beverageNum int整型
* @param packageSum int整型vector<vector<>> 每个一维数组中有三个数,依次表示这个包装里面的面包数量、饮料数量、花费
* @return int整型
*/
int minCost(int a, int b, vector<vector<int> >& p) {
int dp[2005][2005];
memset(dp,0x3f,sizeof(dp));
dp[0][0]=0;
for(int i=0;i<p.size();i++){
for(int j=a;j>=0;j--){
for(int k=b;k>=0;k--){
dp[j][k]=min(dp[j][k],dp[max(0,j-p[i][0])][max(0,k-p[i][1])]+p[i][2]);
}
}
}
return dp[a][b];
}
};