携程笔试java岗题解 20230907

ak了,结束后放题解

第一题 回溯 

第二题
不同的节点三角形 n2复杂度
统计每一行和每一列的分别y,o,u个数,两重循环遍历第一个点的xy下标,如果是“y”,则结果为x行u个数乘y列o个数 加 x行o个数乘y列u个数,其余情况以此类推

第三题 加减次数
统计需要加,需要减,可以加,可以减的个数,处理即可

第四题
t为当前方案数,当新增一个0时,t+1,出现1时,t-1, 结果为+t,t为负数时不处理,当t为负数且出现一个0时方案数置为1
全部评论
第二题上半部分 int a[1010][1010]; int row[1010][5]; int col[1010][5]; int main() { int n,m; cin>>n>>m; for(int i=0;i<n;i++) { string t; cin>>t; for(int j=0;j<t.size();j++) { if(t[j] == 'y') a[i][j] = 1; else if(t[j] == 'o') a[i][j] = 2; else if(t[j] == 'u') a[i][j] = 3; else a[i][j] = 4; } } for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { row[i][a[i][j]]++; col[j][a[i][j]]++; } }
1 回复
分享
发布于 2023-09-07 21:05 四川
最后一题是dp吗?有点事就提前交了,这题没做
点赞 回复
分享
发布于 2023-09-07 20:23 上海
滴滴
校招火热招聘中
官网直投
一题 #include <iostream> using namespace std; int prime[50]; int ans; int val[50]; int a[50]; void getAns(int k,int n) { if(k == n) { ans++; return; } for(int i=1;i<=n;i++) { if(val[i]) continue; if(k!=0 &amp;&amp; prime[a[k-1]+i]) continue; val[i] = 1; a[k] = i; getAns(k+1,n); val[i] = 0; } } int main() { int n; cin>>n; prime[1] = 1; prime[2] = 1; prime[3] = 1; for(int i=4;i<=20;i++) { int flag = 1; for(int j=2;j<i;j++) { if(i % j == 0) { flag = 0; break; } } prime[i] = flag; } getAns(0,n); cout<<ans<<endl; }
点赞 回复
分享
发布于 2023-09-07 21:01 四川
第三题 #include <iostream> using namespace std; int main() { long long T; cin >> T; while (T--) { long long n, l, r; cin >> n >> l >> r; long long needadd = 0; long long needmin = 0; long long canadd = 0; long long canmin = 0; for (long long i = 0; i < n; i++) { long long t; cin >> t; if (t < l) needadd += l - t; if (t > r) needmin += t - r; if (t > l) canmin += t - l; if (t < r) canadd += r - t; } // cout<<needadd<<" "<<canadd<<" "<<needmin<<" "<<canmin<<endl; if (needadd > canmin || needmin > canadd) cout << -1 << endl; else cout << max(needadd, needmin) << endl; } }
点赞 回复
分享
发布于 2023-09-07 21:02 四川
第四题 #include <iostream> (30316)#include<string> using namespace std; int main() { string a; cin>>a; long long ans = 0; int t = 0; for(int i=0;i<a.size();i++) { if(a[i] == '0') { if(t<0) t = 0; t++; if(t>0) ans+=t; } else if(a[i] == '1') { t--; if(t>0) ans+=t; } } cout<<ans<<endl; }
点赞 回复
分享
发布于 2023-09-07 21:02 四川
第二题下半部分 long long ans = 0; for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { if(a[i][j] == 1) { ans+=row[i][2] * col[j][3]; ans+=row[i][3] * col[j][2]; } if(a[i][j] == 2) { ans+=row[i][1] * col[j][3]; ans+=row[i][3] * col[j][1]; } if(a[i][j] == 3) { ans+=row[i][2] * col[j][1]; ans+=row[i][1] * col[j][2]; } } } cout<<ans<<endl; }
点赞 回复
分享
发布于 2023-09-07 21:05 四川
果然是大佬,题解很清晰!
点赞 回复
分享
发布于 2023-09-07 21:18 辽宁
太强了
点赞 回复
分享
发布于 2023-09-07 21:30 甘肃
tql
点赞 回复
分享
发布于 2023-09-07 21:54 安徽

相关推荐

6 14 评论
分享
牛客网
牛客企业服务