1.17 CW 模拟赛 赛时记录

前言#

策略不变, 心态放平

看题#

T1#

构构造造, 不活了

T2#

应该比 T1

T3#

贡贡献献

T4#

困难


肯定是难得, B 组, 把暴力打好

T1#

每次都栽在这上面, 反正就是不要慌, 然后按照时间分配去做
注意策略的选择和心态, 加油吧
不要死磕, 剩的时间不多了直接去暴力
太复杂了一定要换思路

思路#

首先题意

求一个长度为 n01S , 使得 l=1nr=ln[|S[l:r]| mod 2=1]

观察到 k=1,2 这两种情况, 应该是很重要的提示

考虑如果只有一个 1 , 那么怪的区间应当包含这个位置, 组合数学算一下是简单的

考虑如果有两个 1 , 我们可以计算包含其中 1 个的情况即可
具体怎么计算, 考虑两个 1 的位置在 p1,p2
你发现总的区间个数为

p1×(p2p1)+(p2p1)×(np2+1)=(p2p1)×[n(p2p1)+1]

p2p1=x , 容易有 1x<n

x×(nx+1)

x 显然可以取到最大值, 任意输出一种方案即可

那么如果 k 更大怎么办?
考虑一个区间包含三个 1 的情况, 我们先打个暴力出来看性质


打出来发现非常明显的性质, 都是一堆 1 加上平均分配的 1
考虑证明

好吧看起来证明不来, 打了再说, 比较冒险


具体的, 注意到答案的性质为

  • k=1 : 直接把 1 放在中间任意一个位置
  • k=2 : 均分
  • k>2 : 把 k21 堆在前面, 然后最后两个 1 均分, 均分的方式按照 k 的奇偶性决定

但是怎么输出具体的答案?

实现#

#include <bits/stdc++.h>
#define int long long

int n, k;

signed main()
{
    scanf("%lld %lld", &n, &k);
    if (k == 0) {
        printf("0\n");
        for (int i = 1; i <= n; i++) printf("0 ");
    } else if (k == 1) {
        printf("%lld\n", (n / 2 + 1) * (n - n / 2));
        for (int i = 1; i <= n / 2; i++) printf("0 ");
        printf("1 ");
        for (int i = 1; i <= n - n / 2 - 1; i++) printf("0 ");
    } else {
        printf("%lld\n", (n / 2 + 1) * (n - n / 2));
        for (int i = 1; i <= k - 2; i++) printf("1 ");
        n -= k - 2;
        if (k % 2) {
            printf("1 "); for (int i = 2; i <= n / 2; i++) printf("0 ");
            printf("1 "); for (int i = 2; i <= n - n / 2; i++) printf("0 ");
        } else {
            printf("1 "); for (int i = 2; i <= n - n / 2; i++) printf("0 ");
            printf("1 "); for (int i = 2; i <= n / 2; i++) printf("0 ");
        }
    }

    return 0;
}

反正是单测, 最多挂几组

T2#

在简单一点的题上浪费了很多时间, 接下来冷静一点, 赶紧拼暴力

思路#

转化题意

给你 q 次修改, 判断给定的 m 个区间什么时候完全互不相同

我会 O(qm) !

你发现区间只有不交或者包含的关系, 关键

  • 考虑特殊性质 A, 仅包含包含关系且每次大小增加 1 , 也就是说我们随便搞搞就能过
  • 考虑特殊性质 B , 不知道有什么用, 意思是包含关系产生的连通块大小不超过 40 ?
  • 考虑特殊性质 C , 更不知道有什么用了

考虑出去上个厕所冷静一下

性质 B 怎么做?
你可以考虑把每个位置对应的区间存下来, 然后乱搞搞
发现不会搞

性质 C 怎么做?
你发现如果一个区间长度为 size , 其被修改 size1 个位置后就符合条件, 考虑继续深入
不敢深入了, 时间不多

实现#

框架#

  • 对于 n,m,q5×103 , 维护每个区间对应的颜色出现次数, 修改就直接对次数修改顺便标记答案

  • 对于性质 A , 每次询问只考虑单指针指向的位置, 对于单指针 i 新开数组表示 1i1 有哪些数字

T3

这后面的题肯定就是暴力

思路#

时间不够, 边打边想, 不在这里写了, 虽然可能导致错误, 但是必须拼一下

总结

不要死磕

然后就是继续每日一练, 没了

这把不知道什么水平, 寄了


后记, 实外倒数 rk 1 , 但是要是揪着这个不放也是无敌

posted @   Yorg  阅读(5)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示