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

12.10 CW 模拟赛 赛时记录

时间:2024-12-10 12:42:49浏览次数:5  
标签:赛时 int mathcal 30 pts 倍数 12.10 rm CW

前言

最近发现只要每分钟都在做有意义的事就不算颓, 同理的, 这场考试只要每分钟都在想些事情, 也就不算

短期的主要目标就是利用好时间, 其他的问题我基本上已经解决了, 就是时间分配利用上的问题
所以就只抓时间分配, 这段时间先不去想别的, 就好好把时间利用起来, 不死磕, 不畏难, 利用好时间, 分配好

立个 \(\rm{flag}\) , 这周不刷 \(\rm{B}\) 站了

看题

粗看了一遍, 都不太好做, 好像给了好几道计数

\(1 \rm{h} + 30 \rm{min} + 30 \rm{min} + 30 \rm{min} + 1\rm{h} 10 \rm{min}\)

\(\rm{T1}\)

思路

转化题意, 要求把一个字符串拆分成若干段, 要求相邻子串至少有一个是倍数串

考虑 \(\rm{dp}\) 来计数

朴素的想法是 \(f_{i, 0 / 1}\) 表示切分到了 \(i\) 位置, 其中最后一段是 / 不是倍数串的切分方案数

显然有

\[f_{i, 0} = \sum_{S_{j + 1 \sim i} \ 不是倍数串} f_{j, 1} \]

\[f_{i, 1} = \sum_{S_{j + 1 \sim i} \ 是倍数串} f_{j, 0} \]

这个转移是 \(\mathcal{O} (n ^ 2)\) 级别的, 只能通过 \(\rm{Subtask} \ 1\)
加上预处理每个点之前的

那么怎么去优化时间复杂度呢?

仅仅找到每一个点对应的倍数串都已经 \(n^2\) 了, 确实不好实现

考虑 \(\rm{Subtask}\) 的打法, 居然不会???

判断是否能够成为倍数串好像还需要类似于高精度的方法, 毒瘤啊

预期得分 : \(30 \rm{pts}\)

实现

框架

首先读入, 然后直接计算符合要求的倍数串, 刷表去做

关于怎么计算符合要求的倍数串:

  1. 枚举开头
  2. 从前往后, 先加上这个数再对 \(D\) 取余, 如果变成 \(0\) 就标记倍数串

代码

稍微改了一下实现, 大样例都不想测

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

int T;
int D; std::string S; int n;

class Sol_Class
{
private:

public:
    bool IsMul[MAXN][MAXN];
    /*计算每个点为开头的倍数串*/
    void init()
    {
        for (int i = 1; i <= n; i++) { // 枚举起点
            int nownum = 0;
            for (int j = i; j <= n; j++) {
                nownum *= 10; nownum += S[j] - '0';
                nownum %= D;
                if (nownum) IsMul[i][j] = false; else IsMul[i][j] = true;
            }
        }
    }

    int f[MAXN][2];
    /*计算*/
    void solve()
    {
        memset(f, 0, sizeof(f));
        for (int i = 1; i <= n; i++) {
            f[i][0] = !IsMul[1][i], f[i][1] = IsMul[1][i];
            for (int j = 1; j < i; j++) {
                if (IsMul[j + 1][i]) f[i][1] += f[j][0] + f[j][1];
                else f[i][0] += f[j][1];
            }
        }

        printf("%lld\n", f[n][1] + f[n][0]);
    }
} Sol;

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

    scanf("%lld", &T);
    while (T--) {
        std::cin >> S; scanf("%lld", &D); n = S.length(); S = ' ' + S;
        Sol.init();
        Sol.solve();
    }
}

\(\rm{T2}\)

思路

\(\rm{T1}\) 确实不会做, 来开新题

很快就可以注意到, 之所以独特数的数量有限, 是因为对于 \(B\) 进制, 最多只能出现 \(B\) 种不同的数, 我们考虑直接排列组合这 \(B\) 种不同的数, 转化判断一下就可以得出答案, 这下可以有 \(50 \rm{pts}\) , 非常的赚

容易发现对于某些特殊情况, 从大到小枚举似乎可以骗到更多的分

期望得分 : \(50 \sim 70 \rm{pts}\)

实现

框架

直接 \(\rm{dfs}\)

代码

\(\rm{T3}\)

思路

前面两题连思路都没有也是抽象, 继续打吧

转化题意, 在环上相邻点之间可以选择是否建边, 要求建边之后, 对于 \(P\) 个点对联通
求最小的花费之和

考虑一个 \(\mathcal{O} (nP)\) 的算法可以通过 \(40 \%\)

使用传统 \(\rm{trick}\) , 枚举不使用一条边 \(\mathcal{O} (n)\) , 然后在这种情况下做操作 \(\mathcal{O} (P)\) , 解决

期望得分 : \(40 \rm{pts}\)

\(\rm{T4}\)

思路

我觉得这种策略挺好的, 有节目效果

考虑设计一个 \(\mathcal{O} (nm)\) 级别的算法通过 \(40 \%\)

怎么看不懂样例啊哥们???

真的看不懂啊???

算了直接暴力模拟即可, 每次乘起来, 但是怎么过不了样例???

那这题做不了, 摆了

标签:赛时,int,mathcal,30,pts,倍数,12.10,rm,CW
From: https://www.cnblogs.com/YzaCsp/p/18597159

相关文章

  • ifcwall案例
    ifc中一个ifcwall案例 #6=IFCCARTESIANPOINT((0.,0.,0.));#10=IFCCARTESIANPOINT((0.,0.));#20=IFCDIRECTION((0.,0.,1.));#26=IFCDIRECTION((-1.,0.));#32=IFCAXIS2PLACEMENT3D(#6,$,$);#33=IFCLOCALPLACEMENT(#3665,#32);#96=IFCAXIS2PLACEMENT3D(#6,$,$);#......
  • 2024.12.10讲座
    总体概览主题:嵌入式领域#非阻塞式编程属性:经验分享、进阶教程##之前单片机赛道的同学,学的大部分知识都是对于外设怎么操作、通信协议如何使用。这一讲的内容将让我们的主程序逻辑更加清晰、代码运行更加流畅功能:让程序更高效、清晰、严谨内容阻塞?阻塞,执行某段程序时,CPU......
  • AcWing 92. 递归实现指数型枚举
    文章目录前言代码思路前言简单题只有那么一些,后面的稍微难一点点的题,自己写一道可能就要一个小时。现在不写之后需要的时候可能就来不及了。好吧。种一棵树最好的时间是十年前,对,假设我十年之前是信息竞赛选手,把这些题刷得非常熟练,现在可能就不需要写这些算法题了,但是......
  • 12.04 CW 模拟赛 T2.树的链接
    算法全都想到了,不会读入和\(\rm{LCA}\)直接把赛时记录的拉过来对于\(50\%\)的数据点,直接输出\(-1\)即可前\(20\%\)直接预处理即可注意到一个很强的性质,即保证在此之前在城市\(x\)与\(y\)之间不存在任何路径也就是说每次连边都是加入割边,最终的图一......
  • 12.4 CW 模拟赛 赛时记录
    看题\(\rm{T1}\)需要好好想,应该不是水\(\rm{T2}\)需要思考,有点像边更新最优解这一类\(\rm{T3}\)转换一下好像是一个二分图???然而并不是,但是也没时间想了\(\rm{T4}\)做一做,有机会骗之类的不是说简单题吗?时间分配:\(40\rm{min}+20\rm{min}+40\rm{min......
  • Acwing1696. 困牛排序
    题意给定一个n个数的排列,每次操作将第一个数插入到任意数之后,求多少次操作后排列为升序若\(a_i>a_{i+1}\)那么至少操作i次才能将a_i插入到\(a_{i+1}\)之后这时我们思考是否可以通过i次操作,使得序列有序,假如此时\(a_{i+1~n}\)有序于是我们可以通过插入排序,使得序列有序如何......
  • AcWing 196 质数距离(素数,筛法)
    问题:给定L,R,找出[L,R]中距离最近和最远的质数对。分析:注意到L,R的范围很大,到了int极限值,问题毫无疑问是筛质数,不能用普通的筛法筛出[1,R](复杂度)。埃氏筛法本质是倍数标记合数,注意到如果x是合数,那它一定有不大于sqrt(x)的因数y,那么x就可以被y倍数标记。步骤:1.埃氏筛找出[1,sqrt(R......
  • 12.02 CW 模拟赛 T2.排列
    前言也是找到了韩国原题,有用!算法场上有一个比较显然的想法,即计算出每种逆序对数量对应多少排列,从而计算出排名第\(k\)小的排列有多少个逆序对但是即使计算出来了,我们也不好实现,分析原因发现,实际上是因为不好确定应该怎么填数,时间复杂度仍然趋势一个显然的想......
  • 12.2 CW 模拟赛 赛时记录
    前言\(12\)月的第一场,没有大样例这次带了耳塞,注意考试方法其实并不复杂,先看题吧带上耳塞,终于舒服了看题\(\rm{T1}\)结论题?\(\rm{T2}\)\(\rm{HS}\)似乎讲过???但是我忘了,一会看能不能推一下多半是找规律\(\rm{T3}\)性质题?\(\rm{T4}\)数据结构维护吧,......
  • 【产品方案】基于CW32L010低成本电动工具方案
    本方案采用武汉芯源的CW32L010F8P6作为主控实现低成本电动工具方案,通过PWM方波控制算法进行电机转速控制,内部高精度AD转换实现电机电压、反电动势、电流等信号的采样,并实时进行故障停机保护等功能。一、CW32L010单片机特点内核:ARM®Cortex®-M0+:最高主频48MHz●工作......