Codeforces Round #721 (Div. 2)

Codeforces Round #721 (Div. 2) ABC题解(c++实现) -------------------------------------------------------------------------- A. And Then There Were K 链接:Problem - A - Codeforces 解:给你一个数n,要求你输出一个数k。其中数n和数k有关系:n&(n-1)&(n-2)&..........&k = 0 ,其中&是和运算。 这题可以简单的打个表找到规律。所有的k都是2^x-1(x=1、2、 阅读详情

A And Then There Were K

题目大意

给一个n,求最大的k满足
n & (n−1) & (n−2) & (n−3) & … (k) = 0

主要思路

当n的二进制位数-1时必然会经过1xxxx -> 10000 这时把前面的数都&起来,由于第一位1无法消除,所以最大的数一定是10000 - 1是第一个能把n的第一位1消除的,所以答案就为n的二进制位的个数减1个1组成的数

#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <stack>
#include <string>
#include <cmath>
#include <unordered_map>
using namespace std;

#define int long long
#define debug(a) cout << #a << " = " << a << endl;
#define x first
#define y second
typedef pair<int, int> P;

signed main(void)
{
    int T;
    cin >> T;
    while(T--)
    {
        int n;
        cin >> n;
        int res = 0;
        while(n)
        {
            res <<= 1;
            res++;
            n >>= 1;
        }
        res >>= 1;
        cout << res << endl;
    }
    return 0;
}

B1 Palindrome Game (easy version)

题目大意

给一个回文串,先手和后手有两种操作:

  1. 把一个0,变成一个1,花费1的代价
  2. 如果前一次操作不是2操作并且当前串不是个回文串,把当前串反转,不花费代价

ALICE先手,BOB后手

主要思路

由于是回文串,ALICE先手只能把0变为1。

  • 考虑0的个数为偶数时,BOB的最优操作是在对称位置将0变成1,在仅有2个0的时候,还是回文串ALICE只能把0变为1,此时BOB翻转字符串,下次操作ALICE不能翻转,那么BOB必胜
  • 考虑0的个数为奇数时,那么ALICE先手把中间的0变为1,此时相当于BOB先手,ALICE必胜

考虑特殊情况

  • 当场上仅有1个0时,BOB必胜
#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <stack>
#include <string>
#include <cmath>
#include <unordered_map>
using namespace std;

#define int long long
#define debug(a) cout << #a << " = " << a << endl;
#define x first
#define y second
typedef pair<int, int> P;

signed main(void)
{
    int T;
    cin >> T;
    while(T--)
    {
        int n;
        cin >> n;
        string t;
        cin >> t;
        int cnt0 = 0;
        for(int i = 0; i < t.size(); i++)
        {
            if(t[i] == '0') cnt0++;
        }
        
        if(cnt0 == 0) puts("DRAW");
        else if(cnt0 % 2 == 0 || cnt0 == 1) puts("BOB");
        else puts("ALICE");
    }
    return 0;
}

B2 Palindrome Game (hard version)

题目大意

跟上题相同,不过给的串不一定是回文串

主要思路
  • 回文串情况与上题相同,接下来仅考虑不是回文串情况

  • 由于不是回文串,ALICE开局翻转即可,那么BOB的最佳操作就必须将0改为1,且向回文串靠近,这样ALICE才能不翻转,但在BOB将串改为回文串之前,ALICE可以讲串提前改为回文串,那么BOB必须修改(ALICE真的太坏了),ALICE必胜。

考虑特殊情况

  • 当开局场上仅有两个0且将一个0变为1就能修改为回文串时,必平局
    • ALICE修改为回文串,BOB也必须修改
    • ALICE翻转,BOB修改为回文串,ALICE修改
#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <stack>
#include <string>
#include <unordered_map>
#include <set>
#include <queue>
using namespace std;

#define int long long
#define debug(a) cout << #a << " = " << a << endl;
#define x first
#define y second
typedef pair<int, int> P;


signed main(void)
{
    ios::sync_with_stdio(false);
    int T;
    cin >> T;
    while(T--)
    {
        int n;
        cin >> n;
        string t;
        cin >> t;
        bool flag = true;
        int cnt0 = 0;
        for(int i = 0; i < t.size(); i++)
        {
            if(t[i] != t[t.size() - 1 - i]) flag = false;
            if(t[i] == '0') cnt0++;
        }

        if(flag)
        {
            if(cnt0 == 0) puts("DRAW");
            else if(cnt0 % 2 == 0 || cnt0 == 1) puts("BOB");
            else puts("ALICE");
        }
        else
        {
            if(cnt0 == 2 && t[t.size() / 2] == '0' && t.size() % 2) puts("DRAW");
            else puts("ALICE");
        }
    }
    return 0;
}

C Sequence Pair Weight

题目大意

定义sum为一个数列中相同的数在不同位置的对数,问对于一个数列,它的串及其所有子串的sum和为多少

主要思路

经典套路!

我们先考虑一个数对对答案的贡献。

假设a1, a2, a3, …, ai, 中a3与ai相同,那么这个数对对答案的贡献首先a3可以向前拓展2个位置,ai可以向后拓展到n位置,也就是字串除必须有a3~ai外,a3也可以为,a2,a3或者a1,a2,a3一共3种情况,ai向后拓展同理,所以这个数对对答案的贡献为3 * (n - i + 1)。

接下来考虑多个数对情况

假设a1, a2, a3, …, ai,中a1,a3与ai相同,那么ai可以与前两个数凑成数对,也就是(1 + 3) * (n - i + 1),所以我们只需要维护前i个数中,a[i]的下标和即可

如果求所有的数的贡献,只要记录相同数出现的下标之和,每次结果加上 (当前数出现过的下标之和)*(n-i+1)

#include <iostream>
#include <cstring>
#include <string>
#include <algorithm>
#include <stack>
#include <string>
#include <cmath>
#include <unordered_map>
#include <queue>
using namespace std;

#define int long long
#define debug(a) cout << #a << " = " << a << endl;
#define x first
#define y second
typedef pair<int, int> P;

const int N = 100010;
int n, a[N];

signed main(void)
{
    std::ios::sync_with_stdio(false);
    unordered_map<int, int> mp;
    int T;
    cin >> T;
    while(T--)
    {
        mp.clear();
        int res = 0;
        int n;
        cin >> n;
        for(int i = 1; i <= n; i++)
        {
            cin >> a[i];
            res += mp[a[i]] * (n - i + 1);
            mp[a[i]] += i;
        }
        cout << res << endl;
    }
    return 0;
}
Flowable任务节点动态预测:基于任务ID与参数获取下一节点及候选分配策略 本文深入探讨了Flowable工作流引擎中任务节点动态预测功能的实现。通过解析任务ID与运行时参数,模拟流程执行路径,精准预测下一节点及候选用户/组集合,从而提升用户体验与系统透明度。核心在于利用自定义命令实现表达式求值,并深度解析候选者分配策略,确保预测结果与实际流程执行一致。 阅读详情

相关推荐

ESP32-S3开发环境避坑指南:VS Code+ESP-IDF离线安装全流程(附国内镜像加速)

本文提供了一份详细的ESP32-S3开发环境离线安装指南,重点解决网络依赖问题。通过整合国内镜像加速,手把手教你完成VS Code、ESP-IDF框架、工具链及Python依赖的本地化部署,实现稳定、可重复的开发环境搭建,大幅提升IoT开发效率。

peach的博客 962

Codeforces Round #721 (Div. 2)A,B1,C题解

A 求能够使and位运算为0的最大值,只要知道这个数的二进制有多少位,把第一位变成0,后边的全变成1就行了。 #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e6+5; int a[N]; void solve() { int n; cin>>n; int nn = log2(n);//二进制位数 ll s = 0; for(int i=0;i<n

行码棋 473

10-142 6-4 查询厂商“D“生产的PC和便携式电脑的平均价格

分数 10全屏浏览题目切换布局作者 lhm单位 河北农业大学本题目要求编写SQL语句,查询厂商D生产的PC和便携式电脑的平均价格。

dqd66的博客 2748

Codeforces Round #721 (Div. 2)2021.05.20

Codeforces Round #721 (Div. 2) 闲话:这场不想多写证明了,基本上就是推推推(其实是懒啦)。 A. And Then There Were K 题意 找出最大的k让上面那一个式子为0. 题解 &起来为0且最大化那么让最高位为0其它位为1即可。 code using namespace std; const int N=1e8; const ll maxn=1e10; //ll a[12]; ll solve(ll n) { ll cnt=0; ll

violet-apricity的博客 333

用宝塔面板+CentOS 7.6,30分钟搞定DNF手游私服搭建(附全套资源下载)

本文详细介绍了如何使用宝塔面板和CentOS 7.6在30分钟内快速搭建DNF手游私服。通过图形化界面操作,无需复杂命令,即可完成服务端部署、MySQL数据库配置及客户端适配,适合Linux新手快速上手。

weixin_33737774的博客 601

7、CUDA 软件架构与开发工具详解

本文深入探讨了CUDA的软件架构与核心开发工具,涵盖CUDA数组与纹理、表面引用、图形互操作性机制,以及CUDA运行时与驱动程序API的功能对比。详细解析了nvcc编译器的使用方法、编译轨迹与代码生成选项,并结合实际示例说明其应用。文章旨在帮助开发者理解不同技术的选择依据,合理利用CUDA工具链,提升GPU计算性能,适用于从入门到进阶的CUDA开发人员参考。

nnn11的博客 98

Codeforces Round #721 (Div. 2) D. MEX Tree(树)

Codeforces Round #721 (Div. 2) D. MEX Tree(树) 链接 题意:给出一颗树定义一条路径的权值是路径上所有点编号的 mex⁡\operatorname{mex}mex。对于每个0≤i≤n0\le i\le n0≤i≤n 求出 mex⁡\operatorname{mex}mex 为iii的路径有几条。注意,这里统计的路径需要包括至少一条边。 思路:对于mex是x的时候,也就是,0∼x−10 \sim x-10∼x−1在同一条路径上,我们就可以有个大概的思路,枚举mex,然

qq_51672768的博客 239

OpenClaw简介--windows系统安装OpenClaw

在windows安装OpenClaw实现代替人工操作。步骤流程详细,图文并茂。

直到世界的尽头 5348

Codeforces Round # 721 (Div. 2)

Codeforces Round # 721 (Div. 2) 2021/05/20 https://codeforces.com/contest/1527 A. And Then There Were K time limit per test : 1 second memory limit per test : 256 megabytes input : standard input output : standard output 题目描述 Given an integer n, find

qq_30445397的博客 329

195、大模型蒸馏与压缩:知识蒸馏与VLA模型轻量化

折腾完这一整套流程,最大的感悟是:知识蒸馏不是简单的模型压缩,而是知识迁移的工程艺术。每一步都有坑,每个参数都可能影响最终性能。给后来者的建议是:先别急着上蒸馏,把teacher模型的推理延迟和显存占用测清楚,确定瓶颈在哪里——是计算量太大还是内存带宽不够,这决定了你该用蒸馏还是量化还是剪枝。蒸馏训练时一定要监控每一层的特征对齐loss,别只看总loss。如果某一层的对齐loss特别高,说明student在这一层学歪了,需要调整该层的损失权重或者增加该层的投影头容量。

sundong_81的博客 112

给跨代引用记一本账:Java GC 的分配路径、卡表写屏障与收集器版图快速回顾

本文把 Java GC 的零散名词串成一条推理链路:从 TLAB 指针碰撞分配、逃逸分析,到 Eden、Survivor 与晋升的四条路,重点拆解卡表与写屏障如何为老年代指向新生代的引用记账,及 Minor GC 如何只扫脏卡。基于 JDK 8 实测:分散写使 Young GC 停顿涨 10~15 倍,条件卡标记消除卡表伪共享,计数循环让 System.gc 等待 2.7 秒,Survivor 过小使晋升量增加约 400 倍。文末梳理 JDK 8 到 27 的收集器演进、选型路径与排查顺序。

曾经“等你生日那天”都遥远得像未来,如今却可欢愉的挥手说“下个十年见” 17万+

Codeforces Round #721 (Div. 2) B2. Palindrome Game (hard version) (博弈问题)

题目链接:https://codeforces.com/contest/1527/problem/B2 题目大意: 有一个长度为的字符串,由字符'0'和'1'组成。 Alice和Bob进行游戏,一人操作一个回合,Alice先。 每个回合可以进行两种操作: 1,把某个字符‘0’变成'1',支付1元 2,若目前字符串不是回文串,且上个回合不是执行的操作2,则可以把字符串翻转,支付0元 最后字符串全部变为1时,游戏结束,此时花的钱少的人获胜。 本题有两个版本: 1,简单的版本:初始的时候字符串是

madaidao的专栏 272

Claude Code设置中文输出指南

Claude Code 的语言配置其实并不复杂,只要做好全局的默认设置,再加上一些小的提醒技巧,就能完全避免突然切换英文的问题,让你全程用中文流畅地和 AI 助手协作,不用再被语言问题打断工作节奏,真正提升开发效率。

篮球界最会写bug的人;程序猿中打球最菜的人。 2230

Codeforces Round #721 (Div. 2)(B-E)

Codeforces Round #721 (Div. 2)(B-E) Codeforces Round #721 (Div. 2) C. Sequence Pair Weight 题意:给一个数组,求他的所有连续子串中,任取相等的两数的方案之和。 题解:这个题其实,造个全是1的数组乱搞算出来就差不多了。 当计算i的贡献时,我们计算前面所有a[i]的贡献,同时对于每一个包含i的后缀都可以算一次i前面的贡献,所以ans加上map[a[i]]*(n-i+1); 当a[i]在第i个位置时,可为后面的数贡献i个子串

Paispls的博客 280

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Codeforces Round #721 (Div. 2) B2. Palindrome Game (hard version)(博弈)

Codeforces Round #721 (Div. 2) B2. Palindrome Game (hard version)(博弈) 链接 题意:给出01字符串,每个人可以把0变成1,花费1代价,或者翻转字符串,不花费代价,翻转的前提是,不能是回文串,上一个人没有翻转过,如果到全是1的时候,花费最小的人赢 思路:对于回文串的情况,我们可以发现,如果0的个数是1,或者是偶数,那就是后手赢,(对于1,一定是后手,对于偶数,后手只需要和先手保持一致,到最后2个的时候翻转一下就行了),不然就是先手赢。对于非回

qq_51672768的博客 308

efm32 入门.pdf

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

Codeforces Round #721 (Div. 2)题解

Codeforces Round #721 (Div. 2)题解 比赛链接 wa得老惨了qwq,本来还以为只能一题,太惨了太惨了 A. And Then There Were K 给你一个n,求最大的k使得: n&(n-1)&(n-2)&(n-3)&…(k)=0 思路:求n二进制最高位对应的数-1 int n; void solve() { sd(n); int nn=n,val=1; while(nn) { val<

XLH1129的博客 197

Codeforces Round #721 div.2 A-E题解

A. And Then There Were K 题目大意 给定整数 n(1≤n≤109)n(1 \leq n \leq 10^9)n(1≤n≤109) ,求最大的整数 kkk ,使得 n&(n−1)&(n−2)&(n−3)&...(k)=0n\&(n-1)\&(n-2)\&(n-3)\&...(k)=0n&(n−1)&(n−2)&(n−3)&...(k)=0 题解 一般遇到这种题,可以考虑打表找规律,然后发现小

月阁 1162

Codeforces Round #721 (Div. 2)A、B、C题解

不会吧不会吧不会吧不会真的有人520不陪npy去熬夜陪毛子打cf还要掉分被绿吧? 顶不住了,本蒟蒻也要肝题解了,蒟蒻上路如有问题请大佬评论区轻喷指教orz A. And Then There Were K 传送门:A. And Then There Were K 题意: 给定t(1 ≤ t ≤ 3⋅104)组数据,每组数据一个正整数n (1 ≤ n ≤ 109),求最大的整数k,使得n & (n−1) & (n−2) & (n−3) & … (k) = 0成

qq_57822942的博客 1437

Codeforces Round #721 (Rated for Div2)

受刺激了,肝他丫的 A. And Then There Were K 题意: 给你一个n,求???? & (????−1) & (????−2) & (????−3) & … (????) = 0 k的最大值 思路 打表 将原来的数转化为二进制后,首先第一位想要变成0,一定要&一个二进制位数少一的数,然后从j位减小到j-1位一定会&上100…000(j-1个0,共j位),此时除了第一位别的一定是0,再&上一个j-1位的数即可让首位为0,j-1位最

xinnnnnyu的博客 977
上一篇: Codeforces Round #722 (Div. 2)
下一篇: Codeforces Round #723 (Div. 2)
zhbbbb!
博客等级 码龄7年 43粉丝 71原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值