拼多多算法9月25
100,0,100,0
第二题卡住了
就贴个第三题吧
#include <iostream>
#include <cstring>
#include <cmath>
#include <vector>
#include <algorithm>
#include <vector>
#include <list>
#include <stack>
#include <string>
#include <set>
#include <queue>
#include <climits>
#include <unordered_set>
#include <map>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <unordered_map>
#include <initializer_list>
#include <typeinfo>
#include <map>
typedef long long ll;
using namespace std;
int cnt = 0;
double dp[55][55];
double dfs(int u,int v){
if(dp[u][v] != 0){
return dp[u][v];
}
double ans = 0;
if((u == 0&& v== 0)) return dp[u][v] = 1.0;
if(u != 0){
ans += dfs(u - 1,v);
}
if(v != 0){
ans += dfs(u,v - 1);
}
return dp[u][v] = (ans + 1);
}
string ans = "";
int flag = 0;
double eps = 1e-6;
void get_ans(ll u,ll v,double k){
if(abs(k) < eps){
flag = 1;
return;
}
if(u -1 >=0 && dp[u - 1][v] >= k){
ans += "a";
get_ans(u-1,v,k - 1);
if(flag) return;
}else if(v -1 >=0){
ans += "b";
get_ans(u,v - 1,k - dp[u - 1][v] - 1);
if(flag) return;
}
}
int main() {
dfs(54,54);
ll n,m;double k;
scanf("%lld%lld%lf",&n,&m,&k);
get_ans(n,m,k);
cout << ans << endl;
return 0;
}
查看14道真题和解析