首页 > 其他分享 >20240926 模拟赛总结

20240926 模拟赛总结

时间:2024-09-27 11:37:05浏览次数:7  
标签:总结 tmp 10 int 20240926 second 数组 now 模拟

\(10+30+30+10=80\),有挂惨了。

比赛链接:http://172.45.35.5/d/HEIGETWO/homework/66f4fec944f0ed11b057cca9
http://172.45.35.5/d/HEIGETWO/homework/66f4fec944f0ed11b057cca9

A - 智乃的差分

题意:

给定一个数列 \(a_n\)(\(0\le a_i\le 10^9\)),你可以重排这个数组,问是否存在一种排序方式,使得 \(a\) 的差分数组 \(d\) 中不出现 \(x\) 这个数,若可以,求输出方案。

思路:

考虑当 \(a\) 数组升序排序时,差分数组中都是正数,那么可以解决 \(x\) 为负数的情况,所以我们考虑按照 \(x\) 的符号分类讨论。

\(x<0\) 讨论完了,下面讨论 \(x>0\) 或 \(x=0\)。

当 \(x>0\) 时,考虑降序排序数组 \(a\),那么 \(d\) 中的 \(2\) 到 \(n\) 个元素全是负数,但是第一个数可能等于 \(x\),考虑将后面的一个属交换到前面,我们要保证这个数不等于 \(x\) 且不等于 \(0\),若没有这样的数就输出 no

当 \(x=0\) 时,就是要满足重排后的数组的第一个元素不为 \(0\) 且没有相邻的相同元素,这是一个很经典的问题,我们每次找到出现次数最多的元素,若这个数与前面的数不相同,那么就使用这个数,否则使用出现次数次大的元素,将这些数放在另一个答案数组中并在原数组中删除。由于出现次数时持续变化的,所以需要用优先队列维护。

代码:

#include <bits/stdc++.h>

using namespace std;

const int kMaxN = 1e5 + 5;

int T, n, m, x, a[kMaxN], b[kMaxN], p, tot, f;
map<int, int> mp;

int main() {
  freopen("difference.in", "r", stdin);
  freopen("difference.out", "w", stdout);
  ios::sync_with_stdio(0), cin.tie(0);
  for (cin >> T; T; T--) {
    cin >> n >> x;
    for (int i = 1; i <= n; i++) {
      cin >> a[i];
    }
    if (x < 0) {
      sort(a + 1, a + 1 + n);
      cout << "yes\n";
      for (int i = 1; i <= n; i++) {
        cout << a[i] << ' ';
      }
      cout << '\n';
    } else if (x > 0) {
      sort(a + 1, a + 1 + n, greater<int>());
      if (x != a[1]) {
        cout << "yes\n";
        for (int i = 1; i <= n; i++) {
          cout << a[i] << ' ';
        }
        cout << '\n';
      } else {
        p = -1;
        for (int i = 1; i <= n; i++) {
          a[i] != a[1] && a[i] && (p = i);
        }
        if (p == -1) {
          cout << "no\n";
        } else {
          cout << "yes\n" << a[p] << ' ';
          for (int i = 1; i <= n; i++) {
            i != p && (cout << a[i] << ' ');
          }
          cout << '\n';
        }
      }
    } else {
      mp.clear(), f = 0;
      priority_queue<pair<int, int>> q;
      for (int i = 1; i <= n; i++) {
        mp[a[i]]++, b[i] = 0;
      }
      for (pair<int, int> i : mp) {
        q.push({i.second, i.first});
      }
      for (int i = 1; i <= n; i++) {
        pair<int, int> now = q.top();
        q.pop();
        if (now.second == b[i - 1]) {
          if (q.size()) {
            pair<int, int> tmp = q.top();
            q.pop(), b[i] = tmp.second, q.push(now);
            if (--tmp.first) {
              q.push(tmp);
            }
          } else {
            f = 1;
            break;
          }
        } else {
          b[i] = now.second;
          if (--now.first) {
            q.push(now);
          }
        }
      }
      if (!f) {
        cout << "yes\n";
        for (int i = 1; i <= n; i++) {
          cout << b[i] << ' ';
        }
        cout << '\n';
      } else {
        cout << "no\n";
      }
    }
  }
  return 0;
}

B - 牛牛的旅行

题意:

给定一颗 \(n\) 个节点的树,每个点有一个点权,定义一条简单路径的权值为路径中点权的最大值减去路径的长度,求树上所有长度不为 \(0\) 的简单路径的权值和模 \(10^9+7\) 的值。

思路:

首先可以将两种操作分开,计算所有路径的长度和可以用换根 dp 求解,很板,不做讨论,下面只讲如何求解所有路径经过点权的最大值的和。

标签:总结,tmp,10,int,20240926,second,数组,now,模拟
From: https://www.cnblogs.com/lrx-blogs/p/18435276

相关文章

  • 关于科技特长生 家长与孩子需知 20240926_232535
    初识科技特长生什么是科技特长生为什么科技特长生火成为科技特长生的优势高中升大学特招赛道如何成为科技特长生......
  • 面试总结篇--1
    双亲委派机制JVM可识别文件是一个个.class(字节码)文件,而这些.class需要运行起来需要JVM的类加载器将这些.class文件加载到内存,并对数据进行校检、转换、解析、初始化并最终形成可以被JVM直接执行的指令。而JVM的类加载器去加载.class文件的时候所需要遵循的原则就是双亲委派原......
  • 9.26总结
    今天终于把链表中线性表的一系列的操作已经弄得差不多了,理解了链表的定义,初始化,设立头节点,线性表的创建,插入,删除等一系列操作,这是我今天自己重新qiao的代码:includeusingnamespacestd;typedefstructLNode{intlength;intdata;LNodenext;}LNode,LinkedList;voidInitL......
  • 2024/09/25 模拟赛总结
    rk5,\(100+40+5+0=145\)。T2上物理课把式子推出来了,感谢孟德的馈赠#A.变换简单dp,为什么都写\(3\)维啊令\(dp_{i,j,0/1,0/1}\)为考虑前\(i\)位改了\(j\)位,当前是/不是“山谷”,前一位是/不是“山谷”显然,相邻两位一定不会都是山谷,所以\(dp_{i,j,1,1}\)一定不存在考......
  • 基于Node.js+vue基于springboot的模拟面试平台7tch0(开题+程序+论文) 计算机毕业设计
    本系统(程序+源码+数据库+调试部署+开发环境)带文档lw万字以上,文末可获取源码系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展和互联网应用的广泛普及,传统的招聘模式正逐步向数字化、智能化转型。面试作为招聘流程中的关键环节,其效率与效果直接影响到企业的人......
  • RocketMq知识总结及消息顺序性
    为什么选择RocketMq?几种MQ的区别:如果业务场景对并发量要求不是太高(十万级、百万级),那这四种消息队列中,RabbitMQ一定是你的首选。如果是大数据领域的实时计算、日志采集等场景,用Kafka是业内标准的,绝对没问题,社区活跃度很高,绝对不会黄,何况几乎是全世界这个领域的事实性规......
  • 近期总结
    一些近期的模拟赛,被暴打。9.19D\(m\)个部落,\(n\)个洞穴。一开始每个洞穴被\(a_i\)占领,或无人。有两种操作:给出\(l,r,k\)。区间\([l,r]\)更改为\(k\)占领。给出\(l,r,k\)。区间\([l,r]\)的每个洞穴出现价值为\(k\)的宝物,由占领该洞穴的部落获得,若无部落占......
  • 9.24每日总结
    微服务拆分作业参考依赖user-service的pom.xml文件内容如下:<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xs......
  • 9.26每日总结
    给出SpringbootCloud的server:port:8084spring:application:name:user-serviceprofiles:active:devdatasource:url:jdbc:mysql://${hm.db.host}:3306/hm-user?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=......
  • 9.25每日总结 OpenFeign
    OpenFeign利用Nacos实现了服务的治理,利用RestTemplate实现了服务的远程调用。但是远程调用的代码太复杂了:而且这种调用方式,与原本的本地方法调用差异太大,编程时的体验也不统一,一会儿远程调用,一会儿本地调用。用到OpenFeign组件了。其实远程调用的关键点就在于四个:请求方式......