首页 > 其他分享 >12.2 CW 模拟赛 赛时记录

12.2 CW 模拟赛 赛时记录

时间:2024-12-02 16:00:43浏览次数:6  
标签:20 赛时 int max T4 long 12.2 rm CW

前言

\(12\) 月的第一场, 没有大样例

这次带了耳塞, 注意考试方法其实并不复杂, 先看题吧

带上耳塞, 终于舒服了

看题

\(\rm{T1}\)

结论题?

\(\rm{T2}\)

\(\rm{HS}\) 似乎讲过???

但是我忘了, 一会看能不能推一下

多半是找规律

\(\rm{T3}\)

性质题?

\(\rm{T4}\)

数据结构维护吧, 只能到时候在分析


时间 : \(1 \rm{h} \ 10 \rm{min} + 1 \rm{h} \ 20 \rm{min} + 1 \rm{h}\)

策略 : 能冲前两题就冲, 不行就用时间去后面拿分

正序开题

\(\rm{T1}\)

应该可以贪心, 掏样例出来手玩一下看看

注意到不管对于什么情况, 一定都是从最大的掏出来 \(k\) 个, 这样子最优

那么我们考虑怎么高效的维护最值或者找到性质直接做

直接用堆做是 \(\mathcal{O}(n ^ 2 \log n)\) 的, 只能通过 \(80 \%\) 的点, 甚至因为性质不确定可能变成 \(\mathcal{O}(n ^ 2 k \log n)\) 只能拿到 \(40 \%\) 也有可能

贪心策略一定不是最优的, 一定要更深入的分析才行, 但是贪心策略的正确性就在于每次更新后重新进行 \(k\) 的取, 这不好处理

时间上来讲, 这题只能打 \(80 \%\) 了

\(\rm{T2}\)

\(\rm{T1}\) 应该就是想复杂了, 应该不难, 所以再次大劣势

容易想到的是, 我们可以预处理出每种逆序对数对应的全排列的数量

怎么还是不好做呢, 一会打表找下规律

直接打出 \(20 \%\)

\(\rm{T3}\)

每个数都可以被四舍五入而来, 我们可以直接打出 \(20 \%\)

感觉像数位 \(\rm{dp}\) , 赛时没时间研究了, 暴力打了跑路

真的可以 数位 \(\rm{dp}\) , 如果早些来一定能做的, 至少能证伪

\(\rm{T4}\)

\(f(T, k)\) 还比较好求, 具体的, 从前往后贪心, 时间复杂度 \(\mathcal{O} (\lvert T \rvert k)\)

直接比较即可, \(20 \% \sim 40 \%\)

代码

剩下 \(1 \rm{h} \ 30 \rm{min}\)

正打

\(\rm{T1}\)

每次对于一个堆, 我们考虑取出前 \(k\) 大的数, 记录堆中最大值 \(max_h\) , 外面最小值 \(max_c\) , 全部减去 \(max_c - max_h + 1\) 之后把小于 \(max_h\) 的扔进去, 重复这个过程直到 $ >0 $ 的数小于 \(k\) 个

时间复杂度玄学, 看运气拿分

#include <bits/stdc++.h>
// #define FILE_IO
#define int long long
const int MAXN = 1e5 + 20;

int T;
int n, k;
int a[MAXN];

std::priority_queue<int> Q;
int NowChoice[MAXN];
int ChoiceNum = 0;
int Ans = 0;
void solve()
{
    /*初始化*/
    ChoiceNum = 0;
    Ans = 0;
    while (!Q.empty()) Q.pop();

    /*加入堆*/
    for (int i = 1; i <= n; i++) {
        Q.push(a[i]);
    }

    while (1)
    {
        int maxh, minc;
        bool endflag = false;
        while (!Q.empty() && ChoiceNum < k) {
            NowChoice[++ChoiceNum] = Q.top();
            if (Q.top() == 0) endflag = true;
            Q.pop();
        }
        if (endflag) {
            printf("%lld\n", Ans);
            return;
        }

        maxh = Q.top();
        minc = NowChoice[ChoiceNum];

        for (int i = 1; i <= ChoiceNum; i++) {
            NowChoice[i] -= std::min(minc, minc - maxh + 1);
        }
        Ans += std::min(minc, minc - maxh + 1);
        int NowChoiceNum = ChoiceNum;
        for (int i = NowChoiceNum; i >= 1 && (NowChoice[i] < maxh || NowChoice[i] == 0); i--) {
            Q.push(NowChoice[i]);
            ChoiceNum--;
        }
    }
}

signed main()
{
#ifdef FILE_IO
    freopen("group.in", "r", stdin);
    freopen("group.out", "w", stdout);
#endif

    scanf("%lld", &T);
    while (T--)
    {
        scanf("%lld %lld", &n, &k);
        for (int i = 1; i <= n; i++) {
            scanf("%lld", &a[i]);
        }

        solve();
    }

    return 0;
}

\(\rm{T2}\)

打表玩一下, 顺便最后有时间看一下能不能找到规律

#include <bits/stdc++.h>
// #define FILE_IO

int n, k;


struct node
{
    int a[20];
    
    int calc()
    {
        int ans = 0;
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j < i; j++) {
                if (a[j] > a[i]) ans++;
            }
        }

        return ans;
    }

    friend bool operator < (node a, node b) {
        int numa = a.calc(), numb = b.calc();

        if (numa == numb) {
            for (int i = 1; i <= n; i++) {
                if (a.a[i] > b.a[i]) return false;
                else if (a.a[i] < b.a[i]) return true;
            }
        } else {
            return numa < numb;
        }
    }
} JZY[500];

void solve()
{
    int cnt = 0;
    int a[20];
    for (int i = 1; i <= n; i++) {
        a[i] = i;
    }

    do {
        cnt++;
        for (int i = 1; i <= n; i++)
            JZY[cnt].a[i] = a[i];
    } while (std::next_permutation(a + 1, a + n + 1));

    std::sort(JZY + 1, JZY + cnt + 1);

    for (int i = 1; i <= n; i++)
        printf("%d ", JZY[k].a[i]);
}

int main()
{
#ifdef FILE_IO
    freopen("permutation.in", "r", stdin);
    freopen("permutation.out", "w", stdout);
#endif

    scanf("%d %d", &n, &k);

    if (n >= 20) {
        long long LSY = 1;
        for (int i = 1; i <= n; i++) LSY *= 1ll * i;
        if (LSY == n) {
            for (int i = 1; i <= n; i++) printf("%d ", n - i + 1);
        } else {
            for (int i = 1; i <= n; i++) printf("%d ", i);
        }
    } else {
        solve();
    }
    
    return 0;
}

\(\rm{T3}\)

时间不够, 去打 \(\rm{T4}\)

\(\rm{T4}\)

总结

趋势, 每次打不完???

标签:20,赛时,int,max,T4,long,12.2,rm,CW
From: https://www.cnblogs.com/YzaCsp/p/18582048

相关文章

  • 12.2
    1、 需求描述:请设计一个仓储管理系统原型系统,该系统支持多个仓库的设立。统一设立物资台账,物资台账需包含物资编码、物资名称、规格、材质、供应商、品牌、物资分类,用户可以自定义物资的物资分类。需限制相同的物资名称、规格、材质的物资不能设立相同的物资编码。仓库人员......
  • 12.2
    1、结构设计:设计数据库结构,绘制ER图,并写出相应的数据字典。 仓库(Warehouse)字段名   数据类型WarehouseID INTWarehouseName   VARCHAR(100)Location  VARCHAR(255)ManagerVARCHAR(100)ContactNumber     VARCHAR(20) 物资分类(MaterialCateg......
  • 【产品方案】基于CW32L010低成本电动工具方案
    本方案采用武汉芯源的CW32L010F8P6作为主控实现低成本电动工具方案,通过PWM方波控制算法进行电机转速控制,内部高精度AD转换实现电机电压、反电动势、电流等信号的采样,并实时进行故障停机保护等功能。一、CW32L010单片机特点内核:ARM®Cortex®-M0+:最高主频48MHz●工作......
  • 【产品方案】CW32L010低成本工业仪表
    一、引言先看看L010家族产品功能:TSSOP20的封装可以产品PCB面积极大缩小。以下几个特性让CW32L010在工业仪表上应用更有优势:1.集成了主频高达48MHz的ARM®Cortex®-M0+内核。2.64K超大Flash存储容量。3.极限超低功耗0.3uA,85℃高温漏电仅1.2uA。4.全面升级的低功......
  • 【产品方案】基于CW32L010的低成本USB充电检测仪产品方案
    实物展示LCD版数码管版模块正面模块反面一、引言在当今智能设备时代,USB充电技术普及,高效的USB充电检测仪对设备运行和寿命至关重要。本文介绍一款基于CW32L010F8U6芯片的USB充电检测仪。该检测仪设计为数码管版和LCD版同板,因显示引脚共用,故实际使用时需二选......
  • 11.28 CW 模拟赛 赛时记录
    看题有外校的一起考,那我爆个\(0\)\(\rm{A}\)至少不能是简单题考虑找规律一类的东西,看能不能推出来?\(\rm{B}\)啊?也是需要脑子,多半不会做,应该也是规律题\(\rm{C}\)至少暴力可以打,争取达到高档暴力\(\rm{D}\)能打到这在想吧完了嘛时间分配:\(1\rm{h}+......
  • 11.26 CW 模拟赛 赛时记录
    看题也是给他绑上\(\rm{Subtask}\)了,这我骗鸡毛分啊感冒也是非常难受,但是事已至此,先读题吧题目背景好看爱看\(\rm{T1}\)图论题,好玩\(\rm{T2}\)大概也是不会做,再说\(\rm{T3}\)难绷,考虑高档暴力\(\rm{T4}\)这个肯定是暴力都难打今天也是\(30\rm{min}......
  • MITRE公布2024 年“CWE TOP 25”
    MITRE分享了从2023年6月至2024年6月期间披露的31,000多个漏洞背后最常见和最危险的25个软件弱点列表。软件弱点是指在软件的代码、架构、实现或设计中发现的缺陷、错误、漏洞和错误。攻击者可以利用这些弱点来破坏运行易受攻击软件的系统,从而能够控制受影响的设备并......
  • acwing第三章算法模板
    29、树与图的存储树是一种特殊的图,与图的存储方式相同。对于无向图中的边ab,存储两条有向边a->b,b->a。因此我们可以只考虑有向图的存储。(1)邻接矩阵:g[a][b]存储边a->b(2)邻接表://对于每个点k,开一个单链表,存储k所有可以走到的点。h[k]存储这个单链表的头结点int......
  • 【Azure Developer】com.azure:azure-identity jar包版本从1.2.0 升级到1.12.2 版本之
    问题描述com.azure:azure-identityjar包版本从1.2.0升级到1.12.2版本之后报错,错误信息如下:Anattemptwasmadetocallamethodthatdoesnotexist.Theattemptwasmadefromthefollowinglocation:  com.azure.identity.implementation.IdentityClientBase.getConf......