Codeforces Round 960 (Div. 2) A~E

EETI_eGTouch驱动移植及校准 一.环境 芯片:NXP IMX6Q 内核版本:4.1.15 uname:Linux myimx6ek314 4.1.15-myimx6-g5d588fa6-dirty #4 SMP PREEMPT Tue Nov 17 17:26:34 CST 2020 armv7l armv7l armv7l GNU/Linux 二.官方《EETI_eGTouch_Linux_Programming_Guide_v2.5l.pdf》文档勘误 HID_MULTITOUCH =Y or N(官方文档设置为M): 正确设置H 阅读详情

A. Submission Bait (思维)

题意:

AliceAliceAlice 和 BobBobBob 正在玩一个数组 aaa 中大小为 nnn 的游戏。

他们轮流进行操作,AliceAliceAlice先开始。无法操作的玩家将输掉。首先,将变量 mxmxmx 设置为 000 。

在一次操作中,玩家可以执行以下操作:

  • 选择一个索引 iii ( 1≤i≤n1 \le i \le n1≤i≤n ),使得 ai≥mxa_{i} \geq mxai​≥mx ,并将 mxmxmx 设置为 aia_{i}ai​ 。然后,将 aia_{i}ai​ 设置为 000 。

确定AliceAliceAlice是否有获胜策略。

分析:

考虑最大值的奇偶性,如果有奇数个最大值,那么先手赢。如果是偶数个最大值,那么就要考虑剩下的数字的奇偶性。如果有一个值有奇数个,那么先手赢,否则后手赢

代码:

#include <bits/stdc++.h>

using namespace std;

int main() {
    int t = 1;
    cin >> t;
    while (t--) {
        int n;
        cin >> n;
        vector<int> a(n + 1);
        for (int i = 0; i < n; i++) {
            int x;
            cin >> x;
            a[x]++;
        }
        int flag = 0;
        for (int i = n; i; i--) {
            if (a[i] & 1) {
                flag = 1;
                break;
            }
        }
        if (flag)
            cout << "YES" << endl;
        else
            cout << "NO" << endl;
    }
    return 0;
}

B.Array Craft (思维)

题意:

对于大小为 mmm 的数组 bbb ,我们定义:

  • bbb 的最大前缀位置是满足 b1+…+bi=max⁡j=1m(b1+…+bj)b_1+\ldots+b_i=\max_{j=1}^{m}(b_1+\ldots+b_j)b1​+…+bi​=maxj=1m​(b1​+…+bj​) 的最小索引 iii ;
  • bbb 的最大后缀位置是满足 bi+…+bm=max⁡j=1m(bj+…+bm)b_i+\ldots+b_m=\max_{j=1}^{m}(b_j+\ldots+b_m)bi​+…+bm​=maxj=1m​(bj​+…+bm​) 的最大索引 iii 。

给出三个整数 nnn 、 xxx 和 yyy ( x>yx > yx>y )。构造一个大小为 nnn 的数组 aaa ,满足:

  • 对于所有 1≤i≤n1 \le i \le n1≤i≤n , aia_iai​ 为 111 或 −1-1−1 ;
  • aaa 的最大前缀位置为 xxx ;
  • aaa 的最大后缀位置为 yyy 。

如果有多个数组满足条件,则输出任意一个。可以证明,在给定条件下,这样的数组始终存在。

分析:

我们让yyy的左侧−1,1-1,1−1,1交替出现,在区间[y,x][y,x][y,x]全选择111,xxx的右侧也是−1,1-1,1−1,1交替出现即可完成构造。

代码:

#include <bits/stdc++.h>

using namespace std;

int main() {
    int t = 1;
    cin >> t;
    while (t--) {
        int n, x, y;
        cin >> n >> x >> y;
        vector<int> ans(n + 1, 1);
        for (int i = y - 1; i >= 1; i--) {
            ans[i] = -ans[i + 1];
        }
        for (int i = x + 1; i <= n; i++) {
            ans[i] = -ans[i - 1];
        }
        for (int i = 1; i <= n; i++) {
            cout << ans[i] << " ";
        }
        cout << endl;
    }
    return 0;
}

C.Mad MAD Sum (思维)

题意:

我们将数组中的 MAD{MAD}MAD (最大重复数)定义为数组中至少出现两次的最大数字。具体来说,如果没有至少出现两次的数字,则 MAD{MAD}MAD 的值是 000 。

例如, MAD([1,2,1])=1{MAD}([1, 2, 1]) = 1MAD([1,2,1])=1 、 MAD([2,2,3,3])=3{MAD}([2, 2, 3, 3]) = 3MAD([2,2,3,3])=3 、 MAD([1,2,3,4])=0{MAD}([1, 2, 3, 4]) = 0MAD([1,2,3,4])=0 。

给定一个大小为 nnn 的数组 aaa 。最初,将变量 sumsumsum 设置为 000 。

以下过程将以顺序循环执行,直到 aaa 中的所有数字都变为 000 :

  1. 设置 sum:=sum+∑i=1naisum := sum + \sum_{i=1}^{n} a_isum:=sum+∑i=1n​ai​ ;
  2. 让 bbb 成为大小为 nnn 的数组。将所有 1≤i≤n1 \le i \le n1≤i≤n 设置为 bi:= MAD([a1,a2,…,ai])b_i :=\ {MAD}([a_1, a_2, \ldots, a_i])bi​:= MAD([a1​,a2​,…,ai​]) ,然后将所有 1≤i≤n1 \le i \le n1≤i≤n 设置为 ai:=bia_i := b_iai​:=bi​ 。

求出经过此处理后的 sumsumsum 的值。

分析:

发现从第二次操作开始,数列一定为单调递增,且除了最大的权值外每种权值至少出现222次,且每次操作对数列的影响均为使数列整体右移一位,删去最后一个数并在前面补000。
于是我们先暴力模拟两轮记录贡献和,然后求得每种权值的出现次数,再降序枚举每种权值(也即每轮删数的顺序),统计删去该权值的各轮的贡献之和即可。

代码:

#include <bits/stdc++.h>

using namespace std;
typedef long long LL;

int main() {
    int t = 1;
    cin >> t;
    while (t--) {
        int n;
        cin >> n;
        vector<LL> a(n), b(n);
        LL ans = 0;
        map<LL, LL> mp;
        LL mx = 0;
        for (int i = 0; i < n; i++) {
            cin >> a[i];
            ans += a[i];
            mp[a[i]]++;
            if (mp[a[i]] >= 2 && a[i] > mx) {
                mx = a[i];
            }
            b[i] = mx;
        }
        mp.clear();
        mx = 0;
        for (int i = 0; i < n; i++) {
            ans += b[i];
            mp[b[i]]++;
            if (mp[b[i]] >= 2 && b[i] > mx)
                mx = b[i];
            a[i] = mx;
        }
        for (int i = 0; i < n; i++)
            ans += a[i] * (n - i);

        cout << ans << endl;
    }
    return 0;
}

D.Grid Puzzle (dp)

题意:

您将获得一个大小为 nnn 的数组 aaa 。

有一个 n×nn \times nn×n 网格。在 iii 行中,前 aia_iai​ 个单元格为黑色,其他单元格为白色。换句话说,请注意 (i,j)(i,j)(i,j) 是 iii行和 jjj列中的单元格,单元格 (i,1),(i,2),…,(i,ai)(i,1), (i,2), \ldots, (i,a_i)(i,1),(i,2),…,(i,ai​) 为黑色,单元格 (i,ai+1),…,(i,n)(i,a_i+1), \ldots, (i,n)(i,ai​+1),…,(i,n) 为白色。

你可以按任意顺序多次执行以下操作:

  • 将 2×22 \times 22×2 子网格染成白色;
  • 将整行染成白色。请注意,你不能 将整列染成白色。

找出将所有单元格染成白色的最少操作次数。

分析:

我们发现,在每一行最多用一次2×22 \times 22×2的操作,因为超过111次,不如直接两次操作涂完两列。那么每一行最多被两个2×22 \times 22×2的操作影响(前一行和本行),并且可以看出,这个操作要么用在第1,21,21,2列,要么用在3,43,43,4列。所以我们维护以下333种dpdpdp值。

  • 前一行是涂一整行。
  • 前一行在第1,21,21,2列使用了2×22 \times 22×2操作。
  • 前一行在第3,43,43,4列使用了2×22 \times 22×2操作。

进行转移即可。

代码:

#include <bits/stdc++.h>

using namespace std;
const int INF = 1e9;

int main() {
    int t = 1;
    cin >> t;
    while (t--) {
        int n;
        cin >> n;
        vector<int> a(n);
        for (int i = 0; i < n; i++)
            cin >> a[i];
        int dp[3]{0, INF, INF}, tmp[3];
        for (int i = 0; i < n; i++) {
            memset(tmp, 0x3f, sizeof tmp);
            tmp[0] = *min_element(dp, dp + 3) + (a[i] > 0);
            if (a[i] <= 2) {
                tmp[0] = min(tmp[0], dp[1]);
                tmp[1] = min(tmp[1], dp[0] + 1);
            }
            if (a[i] <= 4) {
                tmp[2] = min(tmp[2], dp[1] + 1);
                tmp[1] = min(tmp[1], dp[2] + 1);
            }
            swap(dp, tmp);
        }
        cout << *min_element(dp, dp + 3) << endl;
    }
    return 0;
}

E2.Catch the Mole(Hard Version) (交互)

题意:

这是一个交互题。
给你一个节点数为 nnn 的树,节点 111 是它的根节点。
其中一个节点中隐藏着一只鼹鼠。要找到它的位置,你可以选择一个整数 xxx ( 1≤x≤n1 \le x \le n1≤x≤n ) 来向陪审团询问。接下来,当鼹鼠在子树 xxx 中时,陪审团将返回 111 。否则,法官将返回 000 。如果法官返回 000 并且鼹鼠不在根节点 111 中,鼹鼠将移动到它当前所在节点的父节点。
最多使用 160160160 次操作来找到鼹鼠所在的当前节点。

分析:

我们每次找出当前询问点子树的重心,这样就能一次排除尽量多的点,但如果出现类似菊花图之类的数据,是难以找到一个较为平衡的点,但要卡掉上述过程的图恰好需要满足点的分布较为均衡,那么此时子树的深度一定不大,很容易将目标点直接跳到根节点。
所以我们可以先在子树内每次选择重心缩小范围,最后留出一部分询问在当前点到根的路径上确定点的位置即可,因为可能这个点之前还在我们确定的子树里,几次操作后又跑到外面去了,所以要最后确定一下位置。由于这部分是一条链,因此可以二分处理,实测可以在160160160的限制内通过此题.

代码:

#include <bits/stdc++.h>

using namespace std;

inline bool qry(int x) {
    cout << "? " << x << endl;
    int s;
    cin >> s;
    return s;
}

vector<int> s[5005], e[5005];
int sz[5005], f[5005], le, rt;

void dfs(int x, int fa) {
    sz[x] = 1;
    f[x] = fa;
    for (auto u: e[x]) {
        if (u == fa)
            continue;
        s[x].push_back(u);
        dfs(u, x);
        sz[x] += sz[u];
    }
    if (e[x].size() == 1 && x != 1)
        le = x;
    if (sz[x] >= 71 && !rt) {
        if (qry(x)) {
            rt = x;
        }
        sz[x] = 0;
    }
}

void solve() {
    int n;
    cin >> n;
    rt = 0;
    for (int i = 1; i <= n; i++) {
        e[i].clear();
        s[i].clear();
    }
    for (int i = 1; i < n; i++) {
        int u, v;
        cin >> u >> v;
        e[u].push_back(v);
        e[v].push_back(u);
    }
    dfs(1, 0);
    if (rt == 0)
        rt = 1;
    for (int i = 1; i < 71; i++) {
        if (qry(le)) {
            cout << "! " << le << "\n";
            return;
        }
    }
    vector<int> v;
    while (rt)
        v.push_back(rt), rt = f[rt];
    int l = 0, r = v.size() - 1;
    reverse(v.begin(), v.end());
    while (l < r) {
        int mid = l + r + 1 >> 1;
        if (qry(v[mid]))
            l = mid;
        else {
            r = mid - 1;
            l--;
            r--;
        }
        if (l < 0)
            l = 0;
    }
    cout << "! " << v[l] << endl;
}

int main() {
    int t = 1;
    cin >> t;
    while (t--)
        solve();
    return 0;
}

赛后交流

在比赛结束后,会在交流群中给出比赛题解,同学们可以在赛后查看题解进行补题。

群号: 704572101,赛后大家可以一起交流做题思路,分享做题技巧,欢迎大家的加入。

Anaconda报错no qt platform plugin could be initialized 今天因为在anaconda中安装了一个新包,安装成功后运行python 程序报错:no qt platform plugin could be initialized。 1.安装Anaconda3-4.2.0-Windows-x86_64,对应python版本为3.5.2,scikit learn版本是0.17。因为要用Isolation Forest算法,只有0.18以上版本scikit learn才包含此算法,所以想更新scikit learn。 conda install scikit-lear 阅读详情

相关推荐

AI智能体赋能Cypress:自动化前端测试的新范式

自动化测试是现代软件工程保障质量的核心实践,其原理是通过脚本模拟用户操作,对软件功能进行验证。随着大语言模型(LLM)和智能体(Agent)技术的发展,测试自动化正迈向智能化新阶段。智能体能够理解自然语言描述的测试需求,并自主规划、执行测试步骤,这为应对前端UI频繁变更、测试用例维护成本高等挑战提供了新思路。在工程实践中,将Cypress这一流行的前端测试框架封装为智能体可调用的标准化技能(Skill),是实现这一愿景的关键。通过设计清晰的交互协议和状态管理机制,智能体可以像人类测试工程师一样“感知”页面状

weixin_33726318的博客 686

Mad MAD Sum-Codeforces Round 960 (Div. 2)

只有连续的数段可以向右传递,做一次虽然非递减,但是会有只有单个的情况这是不可以向右传递的。经过一次运算总可以得到非递减的序列,因为MAD函数非递减,最大值只会越来越大。进行上述操作,知道全变为0为止,对每次操作的数组进行求和,记为。我们可以再做一次计算去除这些数,剩下就是可以向右传递的。MAD函数返回出现次数。读错题目了好难受qaq。

theskyinblue的博客 962

重访时间与覆盖分析的stk操作

1.打开stk 2.创建一个新的场景,命名为Test,选择地球为场景星球,若为金星,可在Central Body里选择Venus(金星自转周期慢,自转周期243天,卫星轨道变化不明显)(其中start stop时间可设置长一些) 3.插入一个AreaTarget或者place,以AreaTarget为例 选择Pattern,Add三个点(用法可见前面的博客,有时候编程的代码也可以帮助理解stk的操作) 4.插入Satellite,选择Orbit Wizard(若想设置卫星的六根数也可

weixin_42664107的博客 1万+

Codeforces 做题日记:基础知识还是很重要

这几个测试例啊,能想出来的也是神人了

ikeline的博客 2139

Docker一键部署Synopsys EDA全家桶(VCS/Verdi 2018版)保姆级教程

本文提供了一份详尽的Docker容器化部署Synopsys EDA工具链(VCS/Verdi 2018版)的保姆级教程。通过环境隔离与标准化,解决传统安装的依赖冲突问题,并重点攻克了容器内GUI图形界面显示的核心难题。教程涵盖从Docker基础安装、镜像获取、容器启动配置,到使用X11转发或VNC实现Verdi完美显示的完整实践,旨在帮助芯片设计工程师快速构建稳定、可移植的一键化EDA工作环境。

weixin_29281941的博客 198

基于 openEuler 24.03 LTS 源码编译安装 Zabbix 7.4

Zabbix是一款开源的企业级分布式监控系统,支持网络、服务器、应用等多种IT资源的监控。核心功能包括数据采集、告警通知、可视化展示等,采用Server/Agent架构,支持多种操作系统。本文详细介绍了在openEuler 24.03系统上部署Zabbix 7.4.2的完整流程,包括环境准备、MySQL配置、PHP/Apache安装、Zabbix编译安装等步骤,为构建企业级监控系统提供了实践指导。

广然笔记 1191

Codeforces Round 960 (Div. 2)(A-D)

如果最大值有奇数个显然Alice赢,否则只需要看排序后是否存在是否为奇数且即可。

the_best_saber的博客 1272

从IR Drop到EM分析:数字IC电源规划中那些没人明说的细节(以MTCMOS配置为例)

本文深入探讨数字IC后端设计中电源规划的关键细节,特别关注MTCMOS配置、电源网络电阻最小化和level shifter供电等实战技巧。通过分析IR Drop和EM问题,提供优化floorplan和powerplan的具体策略,帮助工程师避免常见陷阱,提升芯片设计的稳定性和可靠性。

q9w8e7r6t5的博客 511

Codeforces Round 960 (Div. 2)

总结:Awa 2,Bwa 2,C一直wa。很难评价的一场。感觉D < C。

MenghuanL的博客 1248

The moving least square approximation(MLS).

移动最小二乘法, moving least square

fanglovel的博客 299

Android 9.0 SystemUI禁用长按recent键的分屏功能

​ 在9.0的系统产品开发中,系统对于多窗口模式默认会有分屏功能的,但是在某些产品中,需要禁用分屏模式,所以需要在导航栏中 禁用长按recent的分屏模式功能,接下来分析下相关分屏模式的实现 ​

安卓兼职framework和app工程师的博客 448

Codeforces Round 960 (Div. 2)A~D

我只能说我越来越废了,写不了一点。

小白的博客 1227

基于MATLAB的特征模式分解(FMD)算法详解

本文详细介绍了基于MATLAB的特征模式分解(FMD)算法实现。FMD是一种新型自适应信号分解方法,通过自适应FIR滤波器组和相关峭度优化目标,有效解决传统方法(如EMD、VMD)的模态混叠问题。文章系统阐述了FMD的算法原理、数学模型和实现步骤,包括自适应FIR滤波器设计、相关峭度优化和模态选择机制。与现有方法相比,FMD在旋转机械故障诊断中展现出更强的特征提取能力和噪声鲁棒性。MATLAB实现部分包含核心函数、参数优化和可视化工具,并通过轴承故障等案例验证了算法的有效性。

qq_42212808的博客 192

Codeforces Round 960 (Div. 2)(ABCD)

Codeforces Round 960 (Div. 2) A. Submission Bait B. Array Craft C. Mad MAD Sum D. Grid Puzzle

鱼香rose_的博客 1007

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Codeforces Round 960

Codeforces Round 960

青少年趣味编程 705

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Codeforces Round 960 (Div. 2) (个人题解)(未完成)

前言:参加的第二场cf比赛,这场比赛又只过了两道,第三道就差那么一点点就能过了,可惜时间到了,其实主要还是我codeing的速度太慢了吧,还需练习啊。正文:

Wzh20060111的博客 875

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Codeforces Round 1024

Codeforces Round 1024

青少年趣味编程 1523

Codeforces Round 1019

Codeforces Round 1019

青少年趣味编程 1749

Codeforces Round 1021

Codeforces Round 1021

青少年趣味编程 736

【CF】Day50——Codeforces Round 960 (Div. 2) BCD

有点意思的构造首先题目告诉我们 y < x,这是一个重要的条件我们先来考虑简单情况,假如可以放0进去,那么我们只需要在 y ~ x 之间全放 1 ,其余都是 0 即可,但是现在只能放 1/-1,因此我们必须要想另一种方法。

qq_61422664的博客 748

Codeforces Round 1001

Codeforces Round 1001

青少年趣味编程 1101

Codeforces Round 960 (Div. 2)A——C题解

题意:一个计数器x,Alice和Bob每次可以选一个数a(a>=x),让a变为零,x变为a,问Alice能否赢。题解:找是否有出现次数为奇数的数字即可;

qq_50196144的博客 686

Codeforces Round 960 (Div. 2)VP

00000222233344,我们可以看到就是左边多了个0,使整个序列向右平移一个,然后最边上的被挤了出去,因此我们可以从我们考虑倒数第i个数字a的贡献,它距尾还有n-i+1个距离:它还可以坚持n-i+1轮,也就是贡献a*(n-i+1),于是我们遍历一遍即可。对于连续的4,我们可以用两次操作2,也可以用1次操作1把它凸出来的消掉,然后剩下的22可以左右分或者直接删。很好证明:假如全是偶数,那么先手拿一个,后手一定可以拿相同的一个,于是先手必败。此时,从1--n,对于4直接用操作2,对于2直接操作1即可。

cocoack的博客 936

Codeforces Round 1023

Codeforces Round 1023

青少年趣味编程 656
上一篇: Codeforces Round 958 (Div. 2) A~E
下一篇: Codeforces Round 962 (Div. 3) A~F
AC-Panda
博客等级 码龄5年 1736粉丝 191原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值