Codeforces Global Round 26 A~E

Codeforces Global Round 26 题解分享 Codeforces Global Round 26 abc 阅读详情

A.Strange Splitting(思维)

题意:

将非空数组的范围定义为最大值减去最小值。例如,[1,4,2][1,4,2][1,4,2]的范围是4−1=34-1=34−1=3。

给你一个长度为n≥3n\geq 3n≥3的数组a1,a2,…,ana_1,a_2,\ldots,a_na1​,a2​,…,an​。保证aaa被排序。

你必须给aaa中的每个元素涂上红色或蓝色,以便:

  • 红色元素的范围不等于蓝色元素的范围,并且
  • 每种颜色至少有一个元素。

如果不存在这样的着色,则输出NONONO。如果存在多种有效着色,则可以输出其中任何一种。

分析:

如果a1=ana_1=a_na1​=an​,无解。

如果a2=ana_2=a_na2​=an​,a1,a2a_1,a_2a1​,a2​涂成红色,否则只把a1a_1a1​涂成红色。

代码:

#include<bits/stdc++.h>

using namespace std;
const int N = 1e6 + 10;
int a[N];

void solve() {
    int n;
    cin >> n;
    for (int i = 1; i <= n; ++i)
        cin >> a[i];
    if (a[1] == a[n]) {
        cout << "NO" << endl;
        return;
    }
    cout << "YES" << endl;
    if (a[2] != a[n]) {
        cout << "R";
        for (int i = 2; i <= n; ++i) {
            cout << "B";
        }
        cout << endl;
        return;
    }
    cout << "RR";
    for (int i = 3; i <= n; ++i) {
        cout << "B";
    }
    cout << endl;
}


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

B.Large Addition(模拟)

题意:

如果一个数位介于555和999之间(含),则该数位为大数。如果一个正整数的所有位数都是大数,那么这个正整数就是大正整数。

给你一个整数xxx。它可以是两个位数相同的大正整数之和吗?

分析:

由于大于等于555小于等于999的数不管这么组合,两个数字相加的和一定在10−1810-1810−18之间,那么可以得到如果给出的数的第一位上不是111或者最后一位上是999或者或者中间有一位上是000,那么就是不存在的,否则就是可行的。

代码:

#include<bits/stdc++.h>

typedef long long LL;
using namespace std;

void solve() {
    LL x;
    cin >> x;
    bool flag = 1;
    if (x % 10 == 9)
        flag = 0;
    x /= 10;
    while (x) {
        int y = x % 10;
        if ((y + 9) % 10 == 9)
            flag = 0;
        if (x < 10 && y > 1)
            flag = 0;
        x /= 10;
    }
    if (flag)
        cout << "YES" << endl;
    else
        cout << "NO" << endl;
}

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

C1.Magnitude (Easy Version)(贪心)

题意:

两个版本的问题是不同的。

给你一个长度为nnn的数组aaa。从c=0c=0c=0开始。然后,对于从111到nnn的每一个iii(按递增顺序)做下面的操作之一:

  • 选项111: 设置ccc至c+aic+a_ic+ai​。
  • 选项222: 设置ccc至∣c+ai∣|c+a_i|∣c+ai​∣,∣x∣|x|∣x∣是xxx的绝对值。

设上述步骤后ccc的最大终值等于kkk。求出kkk。

分析:

发现要么一直不用222操作,要么在答案取到最小值的时候使用一遍222操作让其变为相对大一些的值。显然使用多遍222操作是不优的。然后还能发现若存在一个位置PPP使得前缀和小于000,那么这个地方实验222操作较优。因此若不存在一个前缀和的值小于000那么就不应该使用222操作。否则一定在任意一个值最小的位置使用一次222操作即可。

代码:

#include<bits/stdc++.h>

typedef long long LL;
using namespace std;
const int N = 1e6 + 10;
LL a[N], pre[N];

void solve() {
    LL n, id = -1;
    cin >> n;
    for (LL i = 1; i <= n; i++) {
        cin >> a[i];
        pre[i] = pre[i - 1] + a[i];
    }
    LL mi = 0;
    for (LL i = n; i; i--) {
        if (pre[i] < mi) {
            mi = pre[i];
            id = i;
        }
    }
    if (id == -1)
        cout << pre[n] << endl;
    else {
        LL s = 0;
        for (LL i = 1; i <= n; i++) {
            if (i <= id)
                s -= a[i];
            else
                s += a[i];
        }
        cout << s << endl;
    }
}

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

C2.Magnitude (Hard Version)(贪心)

题意:

两个版本的问题是不同的。

给你一个长度为nnn的数组aaa。从c=0c=0c=0开始。然后,对于从111到nnn的每个iii(按递增顺序),做以下操作之一:

  • 选项111:设置ccc至c+aic+a_ic+ai​。
  • 选项222:设置ccc至∣c+ai∣|c+a_i|∣c+ai​∣,∣x∣|x|∣x∣是xxx的绝对值。

假设经过上述程序后,ccc的最大终值等于kkk。求得出c=kc=kc=k的唯一程序的个数。如果在任意索引iii处,一个程序选择了选项111,而另一个程序选择了选项222,即使ccc的值在该轮之后对两个程序都相等,那么这两个程序也是不同的。

由于答案可能很大,输出对998244353998244353998244353取模的结果。

分析:

每一步结束之后,若当前的前缀和取到了全部前缀和的最小值,则这一步对答案造成了2n−i+r2^{n-i+r}2n−i+r贡献,其中rrr是在这一步操作中前缀和不小于000的位置的数量。若全部操作中没有任何一个前缀和小于000则答案为2n2^n2n。

不存在任何一个前缀和使得这个前缀和不大于000。此时对于任意一个位置111操作和222操作没有任何本质区别。任意一步都可以在111操作和222操作中任选一个操作执行。

存在一个前缀和使得这个前缀和不大于000。因为执行完这一步之后后面不论怎么走答案都不会偏离最大值(参见C1C1C1的结论),所以说后面的任意一步都可以在111操作和222操作中任选,即2n−i2^{n-i}2n−i种不同选择;若前面有前缀和大于等于000的那么111操作和222操作没有本质的区别,若有rrr个满足这样条件的则有2r2^r2r种不同选择。根据乘法原理可知对答案的贡献为2n−i+r2^{n-i+r}2n−i+r。其中rrr可以在枚举的时候扫一遍得出答案。

代码:

#include<bits/stdc++.h>

typedef long long LL;
using namespace std;
const int N = 1e6 + 10;
const int MOD = 998244353;
LL a[N], pre[N], bin[N];

void solve() {
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
        pre[i] = pre[i - 1] + a[i];
    }
    LL mi = 0, r = 0;
    for (int i = 1; i <= n; i++)
        mi = min(mi, pre[i]);
    if (mi == 0)
        cout << bin[n] << endl;
    else {
        int ans = 0;
        for (int i = 1; i <= n; i++) {
            if (pre[i] >= 0)
                r++;
            if (pre[i] == mi)
                ans = (ans + bin[n - i + r]) % MOD;
        }
        cout << ans << endl;
    }
}

int main() {
    int t;
    cin >> t;
    bin[0] = 1;
    for (int i = 1; i < N; i++)
        bin[i] = bin[i - 1] * 2 % MOD;
    while (t--)
        solve();
    return 0;
}

D.“a” String Problem(数学)

题意:

给你一个由小写拉丁字符组成的字符串sss。请计算非空字符串t≠t\neqt="a\texttt{a}a"的个数。使得可以将sss分割为满足以下条件的一些子字符串:

  • 每个子串要么等于ttt要么等于"a\texttt{a}a",并且
  • 至少有一个子串等于ttt。

†^{\dagger}†字符串sss的分区是由一些kkk字符串t1,t2,…,tkt_1,t_2,\ldots,t_kt1​,t2​,…,tk​(称为子串)组成的有序序列,使得t1+t2+…+tk=st_1+t_2+\ldots+t_k=st1​+t2​+…+tk​=s,其中+++表示连接操作。

分析:

设sss长度为nnn。特判全为aaa的情况,共n−1n−1n−1种方案。

设sss中非aaa字符的数量为mmm。

如果ttt中有kkk个非aaa字符,把ttt掐头去尾忽略前后的aaa后,原串里一定恰好存在mk\frac{m}{k}km​个t′t′t′,且k∣mk∣mk∣m。

枚举kkk。记录第iii个非aaa字符的位置为pip_ipi​(从000开始),如果spi≠spi−ks_{p_i} \neq s_{p_i−k}spi​​=spi​−k​或不在分割处的pi−pi−1≠pi−k−pi−k−1p_i−p_{i−1}\neq p_{i−k}−p_{i−k−1}pi​−pi−1​=pi−k​−pi−k−1​,t′t′t′不合法。

把t′t′t′还原为ttt,枚举左边有的aaa个数l∈[0,p0]l∈[0,p_0]l∈[0,p0​]。

设xxx为分割处的最小间隔min(pi−pi−1)min(p_i−p_{i−1})min(pi​−pi−1​),k∣ik∣ik∣i,则右边的aaa个数r∈[0,min(x−l,n−pm−1−1)]r∈[0,min(x−l,n−p_{m−1}-1)]r∈[0,min(x−l,n−pm−1​−1)]。

代码:

#include<bits/stdc++.h>

typedef long long LL;
using namespace std;
const int MOD = 998244353;

void solve() {
    string s;
    cin >> s;
    int n = s.length();
    if (count(s.begin(), s.end(), 'a') == n) {
        cout << n - 1 << endl;
        return;
    }
    vector<int> a;
    for (int i = 0; i < n; ++i) {
        if (s[i] != 'a') {
            a.emplace_back(i);
        }
    }
    int m = a.size();
    LL ans = 0;
    for (int i = 1; i <= m; ++i) {
        if (m % i) {
            continue;
        }
        int ok = 1;
        for (int j = i; j < m; ++j) {
            int o = j % i;
            if (s[a[j]] != s[a[o]] || (o && a[o] - a[o - 1] != a[j] - a[j - 1])) {
                ok = 0;
                break;
            }
        }
        if (ok) {
            int mi = n;
            for (int j = i; j < m; j += i) {
                mi = min(mi, a[j] - a[j - 1] - 1);
            }
            int r = n - a.back() - 1;
            for (int l = 0; l <= a[0]; ++l) {
                ans += max(0, min(r + 1, mi - l + 1));
            }
        }
    }
    cout << ans << endl;
}


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

E.Shuffle(树形DP)

题意:

两只饥饿的小熊猫奥斯卡和卢拉有一棵有nnn个节点的树TTT。它们愿意在整棵树TTT上精确地执行一次下面的洗牌程序。通过这个洗牌过程,他们将从旧树的节点中创建一棵新树。

  1. 从原始树TTT中选择任意一个节点VVV。创建一棵以VVV为根的新树T2T_2T2​。
  2. 从TTT中移除VVV,这样原树就会分裂成一个或多个子树(如果VVV是TTT中的唯一节点,则子树数量为零)。
  3. 用同样的方法对每棵子树进行洗牌(同样选择任意节点作为根节点),然后将所有洗牌后子树的根节点连接回VVV以完成T2T_2T2​的构建。

这样,奥斯卡和卢拉就得到了一棵新树T2T_2T2​。它们只能吃树叶,而且非常饥饿,因此请找出在所有树中,只需一次洗牌就能生成的树叶的最大数量。

请注意,树叶是阶数为111的所有节点。因此,如果树根只有一个子节点,那么它就可以被视为树叶。

分析:

把一个点的父亲儿子都加到T2T_2T2​后,这个点就是叶子,且与之直接相连的点都不是叶子。(所有相邻点都是这个点的祖先)。

所有的叶子构成一个独立集,我们找去除根后最大的。

枚举每个节点作为初始的根,换根进行dpdpdp。如果根本身就是叶子还要在加一。

具体来说,第一次扫描以111为根求出fx,1/0f_{x,1/0}fx,1/0​表示以xxx为根的子树中xxx选/不选的最大独立集:
{fx,0=∑y∈gxmax⁡(fy,0,fy,1)fx,1=∑y∈gxfy,0\begin{cases}f_{x,0}=\sum_{y\in g_x}\max(f_{y,0},f_{y,1})\\f_{x,1}=\sum_{y\in g_x}f_{y,0}\end{cases}{fx,0​=∑y∈gx​​max(fy,0​,fy,1​)fx,1​=∑y∈gx​​fy,0​​

第二次扫描求出hx,1/0h_{x,1/0}hx,1/0​表示选/不选xxx的最大独立集,
h1,0/1=f1,0/1h_{1,0/1}=f_{1,0/1}h1,0/1​=f1,0/1​,{hx,0=max⁡(hfa,1,fx,0+(hfa,0−max⁡(fx,1,fx,0)))hx,1=fx,1+(hfa,0−max⁡(fx,1,fx,0))\begin{cases}h_{x,0}=\max(h_{fa,1},f_{x,0}+(h_{fa,0}-\max(f_{x,1},f_{x,0})))\\h_{x,1}=f_{x,1}+(h_{fa,0}-\max(f_{x,1},f_{x,0}))\end{cases}{hx,0​=max(hfa,1​,fx,0​+(hfa,0​−max(fx,1​,fx,0​)))hx,1​=fx,1​+(hfa,0​−max(fx,1​,fx,0​))​

用hx,0+[x is leaf]h_{x,0}+[x \texttt{ is leaf}]hx,0​+[x is leaf]更新答案。

代码:

#include<bits/stdc++.h>

using namespace std;
const int MOD = 998244353;

void solve() {
    int n;
    cin >> n;
    vector<vector<int>> g(n + 1);
    for (int i = 1; i < n; ++i) {
        int x, y;
        cin >> x >> y;
        g[x].emplace_back(y);
        g[y].emplace_back(x);
    }
    vector<array<int, 2>> f(n + 1, {0, 0});
    auto dfs = [&](auto &&dfs, int x, int fa) -> void {
        f[x][0] = 0;
        f[x][1] = 1;
        for (int y: g[x]) {
            if (y != fa) {
                dfs(dfs, y, x);
                f[x][0] += max(f[y][0], f[y][1]);
                f[x][1] += f[y][0];
            }
        }
    };
    dfs(dfs, 1, 0);
    vector<array<int, 2>> h(n + 1);

    h[1][0] = f[1][0];
    h[1][1] = f[1][1];
    int ans = h[1][0] + (g[1].size() == 1);

    auto dfs2 = [&](auto &&dfs2, int x, int fa) -> void {
        int tmp = h[fa][0] - max(f[x][0], f[x][1]);
        h[x][1] = f[x][1] + tmp;
        h[x][0] = max(h[fa][1], f[x][0] + tmp);
        tmp = h[x][0] + (g[x].size() == 1);
        ans = max(ans, tmp);
        for (int y: g[x]) {
            if (y != fa) {
                dfs2(dfs2, y, x);
            }
        }
    };
    for (int y: g[1]) {
        dfs2(dfs2, y, 1);
    }
    cout << ans << endl;
}

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

赛后交流

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

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

Codeforces Global Round 27 (A~F) Codeforces Global Round 27 A. Sliding B. Everyone Loves Tres C. Alya and Permutation D. Yet Another Real Number Problem E. Monster F. Tree Operations 阅读详情

相关推荐

Python 打包与发布陷阱:如何用 setuptools 和 PyInstaller 生成跨平台可执行文件?

使用。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1207

Codeforces Global Round 26

显然,对于取绝对值的操作,只有当前前缀为负的一个较大值时才会对最终结果产生正向影响,这样的位置只会出现一次,因为当出现多个负值时,只有对最后一个负值取绝对值才能最大化答案,而对于多个正值取绝对值无影响;由此我们可以得知,要想分解为两个大正整数,第一位一定为1,最后一位一定不为9,中间的数一定为5~9两两组合的个位+1;之前的数,无论正负,都不能随便取绝对值,否则可能会对当前最值位造成影响,只有当前前缀为正时,才可以取绝对值,后面的数,无论正负,是否取绝对值,对答案无影响,因为。的正整数相加一定会变成一个。

maisui12138的博客 1451

cMake编译 VS2026+opencv4.12.0+opencv_contrib-4.12.0

本文提供了OpenCV 4.12.0集成CUDA、cuDNN和ONNX Runtime的详细编译指南。主要步骤包括:准备Visual Studio 2026、CMake 4.2.0、CUDA 12.6和cuDNN 9.16.0;设置无空格和中文的路径结构;配置关键CMake变量(如开启CUDA支持、指定路径等);以及最终的编译安装过程。注意事项包括:版本一致性检查、cuDNN文件复制、国内用户需手动获取.cache文件等。文章还提供了常见问题解决方案,如通过设置CUDA_NVCC_FLAGS参数解决VS版本

weixin_46624734的博客 1384

Codeforces Global Round 27,D. Yet Another Real Number Problem 题解

【代码】Codeforces Global Round 27,D. Yet Another Real Number Problem 题解。

2301_81388123的博客 1285

光学设计必看:如何用泽尼克系数优化镜头像差?从Zemax到实际案例解析

本文深入解析了如何利用泽尼克系数优化镜头像差,从理解其工程价值、解码软件报告,到在Zemax中主动设置优化目标。通过高倍显微物镜等实际案例,详细展示了如何通过分析泽尼克系数诊断问题,并实施针对性优化策略,从而实现对球差、彗差等像差的精准控制,提升光学设计的精细度和系统稳健性。

gg901的博客 1027

Xilinx FPGA 100G RDMA开发实战:基于AXI Lite配置的ROCE V2高速通信系统搭建

本文详细介绍了在Xilinx FPGA上搭建100G ROCE V2高速通信系统的实战过程。通过分析RDMA技术优势与FPGA实现的必要性,重点阐述了基于AXI Lite接口配置ERNIC IP核的关键步骤,包括硬件系统构建、驱动开发及与商用网卡的互通测试,旨在实现兼具高性能与灵活性的网络加速方案。

js777的博客 576

Codeforces Global Round 27(A - C)

并且除了每一行的第一个元素需要移动m个位置,其他点移动1个格子即可。(1) n == 1 或者 n == 3 时 -1;33和66的最小公倍数为66,枚举66的倍数,(3) n为奇数时最后四位“6366”(2) n为偶数时最后两位“66”的数,从它后面的数开始移动,

LTphy的博客 458

机器人路径规划:基于冠豪猪优化算法(Crested Porcupine Optimizer,CPO)的机器人路径规划(提供MATLAB代码)

移动机器人(Mobile robot,MR)的路径规划是 移动机器人研究的重要分支之,是对其进行控制的基础。根据环境信息的已知程度不同,路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或局部已知的局部路径规划。随着科技的快速发展以及机器人的大量应用,人们对机器人的要求也越来越高,尤其表现在对机器人的智能化方面的要求,而机器人自主路径规划是实现机器人智能化的重要步骤,路径规划是指规划机器人从起点位置出发,无碰撞、安全到达指定目标位置的最优路径。

IT猿手 1367

【补题】Codeforces Global Round 26 E. Shuffle

但在dp的过程中,自己作为叶子节点是不可以的,是别人作为非叶子节点的,自己才可以选择作为叶子节点,根作为第一个节点没有能力选择一个父节点作为非叶子节点,只能是自己,1.首先对于题意进行解析,这个操作是在干什么,然后发现,任意相邻的节点不能同时为叶子节点,然后如果我们把叶子节点归为一类,就会发现所有的叶子节点就是最大独立集。f[3]代表3节点的情况,但是要分类f[3][0/1],代表图中形状的子树3节点作为叶子节点和不是叶子节点的情况。假设以2为根,f[2]所拥有的状态只是红色部分子树,

2401_87294509的博客 1811

常用元器件使用方法3:电平转换芯片74LVC1T45的使用方法

介绍: 74LVC1T45是一个单位双向可控电平转换芯片。   芯片特性: 1、宽供给电压范围:1.65V到5.5V; 2、3.3V时,可输出24mA电流; 3、最大16uA电能损耗; 4、高噪音抑制;   型号:   引脚: VCC(A) 1 A端和DIR电源 GND 2 地 A 3 数据输入/输出 B 4 ...

snmplink的博客 1万+

26、特洛伊木马:威胁与防范

本文详细介绍了多种常见的特洛伊木马,包括RegForm、ProMail和远程访问特洛伊木马(RATs),并分析了其工作原理与危害。重点讲解了著名RATs如Back Orifice、SubSeven和The Thing的技术特点,揭示了黑客编写特洛伊木马的常用语言与方法。同时,提供了有效的防范策略,如谨慎获取软件、使用回滚程序、杀毒软件、防火墙及反特洛伊木马程序,并通过流程图展示了防御机制。旨在帮助用户识别威胁并加强系统安全防护。

e3f4g5的博客 88

Codeforces Global Round 26 A - C2

【代码】Codeforces Global Round 26 A - C。

Xyrsis的博客 307

【git】git: ‘interpret-trailers’ is not a git command. See ‘git --help’

cents 7.6系统. yum源安装git最新版本是1.8.3 报错: git: 'interpret-trailers' is not a git command. See 'git --help'. cannot insert change-id line in .git/COMMIT_EDITMSG 解决: git add xxx git commit -m "xxx" 然后修改 vim .git/hooks/commit-msg #if test -n "${reviewurl}" ; th

machh的专栏 4758

Codeforces Global Round 1 - D. Jongmah(动态规划)

Problem Codeforces Global Round 1 -D. Jongmah Time Limit: 3000 mSec Problem Description Input Output Print one integer: the maximum number of triples you can form. Samp...

weixin_30517001的博客 190

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Codeforces Global Round 26 C1题

dp[i][1]:表示前i个数,使用两中操作保持的最大数。abs(dp[i-1][0]+a[i])是最小值加上当前值的绝对值来维持最大值。dp[i][1]+a[i]是操作1来维持最大值。每个数字两种操作: 1:set c to c+ai 2:set c to |c+ai|dp[i][0]:表示前i个数,保持的最小数,最后转为正数就可以了。// 前i个的维护的最大和最小值。所以dp[i][0]只能只用操作1,来保持最小值。感觉dp懂了又不懂啊,qwq,说下这个题吧。

DD_DM的博客 279

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Codeforces Global Round 26 E. Shuffle 【换根DP】

换根DP

m0_73500785的博客 1106

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Codeforces Global Round 17 C待更新

Codeforces Global Round 17 时间也不早了,就介绍一下C题吧,明天更新D 题目意思就是:给你一个数n,然后再给n个a和n个b意思就是有钱排名i的人最多允许a个人比他还有钱,最多允许b个人比他穷(这个明明就是当代年轻人炫富的主要线路) 本来写的模拟,但是后来时间复杂度行不通O(n log(n))然后就想到了二分 注:这里二分的find用时O(n)然后二分用时O(log(n))所以×起来就是O(n log(n))啦O(∩_∩)O 接下来的就是代码啦!(部分注释使用了一个很奇怪的歪果语言)

weixin_45446715的博客 1311

Codeforces - Global Round 15 - B. Running for Gold

Codeforces Global Round 15 B. Running for Gold time limit per test:1 second memory limit per test:256 megabytes input:standard input output:standard output The Olympic Games have just started and Federico is eager to watch the marathon race. There will be

weixin_51942493的博客 324

Codeforces Global Round 1

说什么呢,还是自己菜啊 【打表】C. Meaningless Operations 题目大意 求$f(a) = \max_{0 < b < a}{gcd(a \oplus b, a \> \& \> b)}.$ $2 \le a_i \le 2^{25} - 1$ 题目分析 题挺有意思的。其中对于$2^x-1$打表。 附上有理有据的t...

weixin_30664051的博客 255

Codeforces Global Round 2

Contest Link A.Ilya and a Colorful Walk 题意: 有n栋房子,每栋房子都有一种颜色,并且房子的位置为i,问最远的不同颜色的房子的距离是多少。 题解: 贪心,从最开始和最后面开始找,比较当前第i间和第j间房子颜色是否相等,如果不等,就比较第i间和第j-1间、第i+1间和第j间,如果不等,进行下一次比较,如果进行下一次比较,说明第i,j,i+1,j-1的房子颜色相...

代不在‘的博客 258

[Codeforces]Codeforces Global Round 1

A - Parity 题意 给定一个$b$进制数,要求输出它在十进制下是奇数还是偶数。 分析 花了我略多的时间,首先题目中给的数字范围很大,不能直接转化为10进制。 分析性质,发现只有奇数乘奇数还是奇数,其他都是偶数。 对奇数进制和偶数进制分类讨论。 偶数进制看最低位的奇偶性,如果是奇数那么这个数就是奇数,不然是偶数。 奇数进制看每一位上奇数的个数,如果是奇数个奇数就是奇...

Myka1991的博客 244

Codeforces Global Round 26 A-D

赛时d的数学公式推错了,而且小数据自己都看不出来问题,直到测一下每个重复字符串的贡献才发现错了,重新推导又用了大量时间,最后也是赛后5分钟才写完,感觉现在数学真不如高中时候了,看了一下e,有点思路但是感觉出不来,看了题解后发现要求MIS,这个是真不会(分析:可以发现只要其中一个数组只有一个数,另一个数组存在两个或以上不同数即可满足条件,a数组最少有三个数,所以只要所有数不同为一个数即可分,将个数大于1的其中一个数放在一个数组里,若没有放第一个数就行,其他的放在另一个数组里即可满足条件。

2301_80210089的博客 1038

Codeforces Global Round 3

同样还是补题 老年人晚上熬不起夜(其实是那天去找女朋友玩了回来晚了 A. Another One Bites The Dust 题意 给出a个"a" b个"b" c个"ab" 然后能组成如"ababa"形串的最大长度 水题 如果a == b的话 就刚好按若干个ab的顺序排 即最长长度为(a + c) * 2 a != b的话 也是按若干个ab排 但多出来的一个a可以排在最后一个b后...

weixin_30532837的博客 95

【Codeforces Global Round 7】 A.B.C.D1.D2

Educational Codeforces Round 20 前言 好久没打cf的老年选手趁着早下班开了一场,感受到对于acm的某些思维有些淡忘了,但感觉这并不完全是坏事,只能说成绩与付出还是很有关系滴,以后尽量找时间再打打吧,不管打的怎么样,题解还是要写滴,只是补题很难有时间了~ A.Bad Ugly Number 题意 构造一个长度为n的数字X,要求X的每一位大于0而且X不是每一位的倍数。 ...

lajiyuan的博客 696

Codeforces Global Round 14 D. Phoenix and Socks 题解

一、算法分析 如何分析这样的题目? 宏观来看,将两只袜子匹配的花费可能是0,1或2,经过分析,先把0花费匹配完之后,不会影响最终结果。那么我们的目标就是使花费2的尽可能地少。 花费0的匹配为:同色不同左右的匹配。 花费1的匹配为:①同色同左右的匹配;②异色不同左右的匹配。 花费2的匹配为:同色同左右的匹配。 在花费0的匹配结束后,每种颜色的袜子就只剩下左袜子或者右袜子。 设第i种左袜子的个数为l[i],右袜子为r[i].在进行完花费0的操作之后: 不妨设左袜子个数l_cnt>=r_cnt,则优先用l_

numb_ac的博客 314
上一篇: AtCoder Beginner Contest 358 A~G
下一篇: 信息学一周赛事安排(6.21~6.27)
AC-Panda
博客等级 码龄5年 1736粉丝 191原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值