• “蔚来杯“2022牛客暑期多校训练营3


    C. Concatenation

    给出一些由0,1,2,3,4组成的字符串,输出通过连接可以得到的最小的数。

    思路:直接sort+卡常就可以过,注意sort自定义排序方式,返回a+b

    AC Code:

    1. #include
    2. const int N=2e6+5;
    3. std::string s[N];
    4. bool cmp(std::string &a,std::string &b){
    5. return a+b
    6. }
    7. int main(){
    8. std::ios::sync_with_stdio(false);
    9. std::cin.tie(0);
    10. std::cout.tie(0);
    11. int n;
    12. std::cin>>n;
    13. for(int i=1;i<=n;++i)
    14. std::cin>>s[i];
    15. std::sort(s+1,s+n+1,cmp);
    16. for(int i=1;i<=n;++i)
    17. std::cout<
    18. return 0;
    19. }

    os:一开始看到了下面的提示,三个人想了半天O(n)的做法,结果最后还是sort+卡一些常过的,就离谱QWQ

    A. Ancestor

    给出两棵树和一个序列,问去掉序列中某一个剩下的所有点的LCA中,A大于B有多少。

    思路:预处理关键点序列在树A和B上的前缀LCA和后缀LCA,枚举去掉的点计算剩余节点的LCA比较权值即可。

    AC Code:

    1. #include
    2. const int N=1e5+5;
    3. int n,k,ans;
    4. int t[N];
    5. struct node{
    6. int f[17][N];
    7. int w[N],pre[N];
    8. int suf[N],dep[N];
    9. std::vector<int>vec[N];
    10. void dfs(int u){
    11. for(auto it:vec[u]){
    12. dep[it]=dep[u]+1;
    13. dfs(it);
    14. }
    15. }
    16. int lca(int x,int y){
    17. if(x==0||y==0) return x+y;
    18. if(dep[x]swap(x,y);
    19. for(int i=17-1;i>=0;i--){
    20. if(dep[x]-(1<=dep[y]) x=f[i][x];
    21. }
    22. if(x==y) return x;
    23. for(int i=17-1;i>=0;i--){
    24. if(f[i][x]!=f[i][y]) x=f[i][x],y=f[i][y];
    25. }
    26. return f[0][x];
    27. }
    28. void init(){
    29. for(int i=1;i<=n;i++){
    30. std::cin>>w[i];
    31. }
    32. for(int i=2;i<=n;i++){
    33. int x; std::cin>>x;
    34. f[0][i]=x;
    35. vec[x].push_back(i);
    36. }
    37. dfs(1);
    38. for(int i=1;i<17;i++){
    39. for(int j=1;j<=n;j++){
    40. f[i][j]=f[i-1][f[i-1][j]];
    41. }
    42. }
    43. for(int i=1;i<=k;i++){
    44. pre[i]=lca(pre[i-1],t[i]);
    45. }
    46. for(int i=k;i>0;i--){
    47. suf[i]=lca(suf[i+1],t[i]);
    48. }
    49. }
    50. int query(int x){
    51. return w[lca(pre[x-1],suf[x+1])];
    52. }
    53. }a,b;
    54. int main(){
    55. std::ios::sync_with_stdio(false);
    56. std::cin.tie(0);
    57. std::cout.tie(0);
    58. std::cin>>n>>k;
    59. for(int i=1;i<=k;i++){
    60. std::cin>>t[i];
    61. }
    62. a.init(),b.init();
    63. for(int i=1;i<=k;i++){
    64. if(a.query(i)>b.query(i)) ans++;
    65. }
    66. std::cout<'\n';
    67. return 0;
    68. }

    os:我能说我LCA还没学么。。。

    J. Jouney

    给定一个城市中有多个十字路口,可以左转,右转,直行,掉头,右转不需要等红灯,问起点到终点所需要的最短时间。

    思路:利用队列优化的Dijkstra,从起点到终点寻找红灯最少的路径,优先队列需要自定义红灯较少的排序方式。

    AC Code:

    1. #include
    2. const int N=5e5+5;
    3. int t,n,m,s1,s2,t1,t2;
    4. int cross[N][5];
    5. std::map<int,bool>st[N];
    6. struct node{
    7. int u,v,w;
    8. bool operator <(const node &a) const{
    9. return w>a.w;
    10. }
    11. };
    12. int getnext(int u,int v){
    13. for(int i=0;i<4;i++){
    14. if(cross[v][i]==u) return (i+1)%4;
    15. }
    16. return -1;
    17. }
    18. int Dijkstra(){
    19. std::priority_queuepq;
    20. pq.push({s1,s2,0});
    21. while(!pq.empty()){
    22. auto [u,v,w]=pq.top();
    23. pq.pop();
    24. if(st[u][v]) continue;
    25. st[u][v]=true;
    26. if(t1==u&&t2==v) return w;
    27. int next=getnext(u,v);
    28. for(int i=0;i<4;i++){
    29. if(st[v][cross[v][i]]) continue;
    30. if(i==next) pq.push({v,cross[v][i],w});
    31. else pq.push({v,cross[v][i],w+1});
    32. }
    33. }
    34. return -1;
    35. }
    36. int main(){
    37. std::ios::sync_with_stdio(false);
    38. std::cin.tie(0);
    39. std::cout.tie(0);
    40. std::cin>>n;
    41. for(int i=1;i<=n;i++){
    42. for(int j=0;j<4;j++){
    43. std::cin>>cross[i][j];
    44. }
    45. }
    46. std::cin>>s1>>s2>>t1>>t2;
    47. std::cout<<Dijkstra()<<'\n';
    48. return 0;
    49. }

    os:这个题看代码的话感觉还好,但是有一些细节需要处理,,问题是赛时签到的一题都搞了好久,我是什么菜比欸

    其他的搞不定了。。。

  • 相关阅读:
    MPLS基础
    【Vue面试题十一】、Vue组件之间的通信方式都有哪些?
    记录vue配置跨域不起作用以及一些理解
    软件测试——基础理论知识你都不一定看得懂
    NSA SELinux将在Linux 6.6中去品牌化为SELinux
    GA遗传算法
    前端算法之搜索插入位置
    如何优化百度搜索引擎?(10个技巧让你的网站更容易被搜索到)
    图论第2天----第1020题、第130题
    vue3组件的通信方式
  • 原文地址:https://blog.csdn.net/m0_62289613/article/details/126077258