栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

2022 年度杭州未来科技城数字经济人才编程大赛

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2022 年度杭州未来科技城数字经济人才编程大赛

2022 年度杭州未来科技城数字经济人才编程大赛

机会总是留给有准备的人!继续加油吧少年!

zj-future01. 信号接收

思路:

定义一个指向第一个接受信号源的末尾的指针,如果后面其余的信号源的起始位置在指针的前面,那就说明有重叠的部分,因此肯定在某一个时间段接受的不是一个信号源。若后面的信号源起始位置在指针的后面,则吧指针重新赋值为该信号源的末尾位置。

最重要得按照起始位置进行排序。

class Solution {
      static bool cmp(const vector &a,const vector &b){
            return a[0]>& intervals) {
        if(intervals.empty())return true;
      //  if(intervals.isempty())return true;
         sort(intervals.begin(),intervals.end(),cmp);
      bool flag=true;
      int end=intervals[0][1];
      for(int i=1;i 
zj-future02. 黑白棋游戏 

思路:

通过滑动窗口的思想。

观察例子可以看到,最后所有的1都会在一起,窗口的大小为1的个数之和。

我们通过窗口内,如果1的个数最多,0的个数最小,那么此时需要交换的次数就是最少的。也就是交换次数==窗口大小-窗口内1的个数。

class Solution {
public:
    int minSwaps(vector& chess) {
        int n=chess.size();
        //窗口的大小
       int widowSize=0;
        for(int i=0;i 
zj-future03. 快递中转站选址 

思路:

首先第一步肯定想到先定义一个曼哈顿函数。

其次,找到所有快递分发点的位置坐标(曼哈顿函数就是要和这些分发点进行计算)

然后通过遍历列表中的每一个节点与所有快递分发点的曼哈顿值的和。

在列表节点中找到一个最小的曼哈顿和即可。

class Solution {
   
public:
    //定义曼哈顿函数
     int manhadun(int p1x,int p1y,int p2x,int p2y){
        //|p2.x - p1.x| + |p2.y - p1.y| 
        return (abs(p2x-p1x) +abs(p2y-p1y));
     
    }
    int buildTransferStation(vector>& area) {
        int minDis=1000000;
        int n=0;
       int cnt=0;
         vector disX;
          vector disY;
        //统计快递分发点的个数以及将位置信息存入(因为位置坐标是成对出现的,可以利用此来简化一些东西)
        for(int i=0;i
zj-future04. 门店商品调配

思路:

参考灵佬解析

https://leetcode.cn/circle/discuss/3p5v9B/?utm_campaign=contest_2022_zjfuture&utm_medium=leetcode_contest_eventpage&utm_source=contest&gio_link_id=qPk5jlw9

class Solution {
public:
    int minTransfers(vector> &distributions) {
        const int n = 12, m = 1 << n;
        int cnt[n] = {};
        for (auto &d: distributions) {
            cnt[d[0]] -= d[2];
            cnt[d[1]] += d[2];
        }
        int f[m] = {};
        for (int i = 1; i < m; ++i) {
            int sum = 0;
            for (int j = 0; j < n; ++j)
                if (i >> j & 1) sum += cnt[j];
            if (sum) f[i] = INT_MAX / 2; // 防止溢出
            else {
                f[i] = __builtin_popcount(i) - 1;
                for (int j = (i - 1) & i; j > 0; j = (j - 1) & i)
                    f[i] = min(f[i], f[j] + f[i ^ j]);
            }
        }
        return f[m - 1];
    }
};

总结:通过最近一个星期左右的刷题,明显感觉到是有点用的,不管是在编程思路还是说在代码编写过程中的c++stl库的运用都得到了明显的提高。也希望后面能够坚持下来,系统性的刷题。
另外:对于本次周赛,相对来说还是比较友好的,虽然只AC了两道题,那个黑白棋的问题没有想到思路,滑动窗口这一块没有了解。赛后有去学习和了解相关的知识和题目。最后一题的话,对我来说难度有点大。慢慢来,争取以后可以AC出来!!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1009042.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号