Educational Codeforces Round 96 (Rated for Div. 2)A-E题解

Educational Codeforces Round 114 (Rated for Div. 2) (A ~ F)全题解 A ~ F 前四题过于简单() 后两题有点要命() 阅读详情

Educational Codeforces Round 96 (Rated for Div. 2)A-E题解
比赛链接:https://codeforces.com/contest/1430

A题
简单构造

题意为现在总数为n,问你能否用若干个3,5,7构成数量n,输出任意一种构造方案。

这里直接按照n%3取余后的结果分成三种情况来考虑。
当n%3=0的时候,直接构造n/3个3即可。
当n%3=1的时候,构造了n/3个3后,还会剩余1,我们最少需要匀出2个3来和这个1来构成一个7,因此此时n/3至少要有2才行。
当n%3=2的时候,构造了n/3个3后,还会剩余1,我们最少需要匀出1个3来和这个2来构成一个5,因此此时n/3至少要有1才行。

#include<bits/stdc++.h>
#define ll long long
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;

int32_t main()
{
    IOS;
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        int rest=n%3;
        if(rest==0) cout<<n/3<<' '<<0<<' '<<0<<endl;
        else if(rest==1)
        {
            if(n/3<2) cout<<-1<<endl;
            else cout<<n/3-2<<' '<<0<<' '<<1<<endl;
        }
        else
        {
            if(n/3) cout<<n/3-1<<' '<<1<<' '<<0<<endl;
            else cout<<-1<<endl;
        }
    }
}

B题
简单贪心

题意为有n桶水,一开始各自有一定量的水,每次操作你可以从某一个桶中倒任意数量的水到另一个桶中,问你k次操作后,最多数量和最少数量水的桶之间水的数量差最大是多少。

这里直接采取贪心的过程就可以了
1次操作后我们可以把最大的2桶水聚集在一桶中,并且得到了一个水数量为0的空桶
2次操作后我们可以把最大的3桶水聚集在一桶中,并且得到了一个水数量为0的空桶
…

所以我们直接sort之后把最大的k+1桶(注意不要超过n)水加在一起就是答案了。

#include<bits/stdc++.h>
#define ll long long
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;

int32_t main()
{
    IOS;
    int t;
    cin>>t;
    while(t--)
    {
        int n,k;
        cin>>n>>k;
        vector<ll>num(n);
        for(auto &x:num) cin>>x;
        sort(num.begin(),num.end());
        k=min(k+1,n);
        ll ans=0;
        for(ll i=1;i<=k;i++) ans+=num[n-i];
        cout<<ans<<endl;
    }
}

C题
构造,贪心,小结论

题意为一开始给你一个长度为n的数列,数字为1到n。你每次操作可以挑选当前数列的两个数字,加起来除2后向上取整放回原数列,n-1次操作后令整个数列只剩下一个数字。
问这个数字最小是多少,并且构造出一种操作方案。

这里先推个小结论。
首先两个数相加除以2后得到1的情况,只能是这两个数都是1。
如果我们用一开始就有的数字1去和其他数字去构造的话,会把现在的这个1用掉并且构造出一个非1的数字,我们不可能构造出1回来。
而我们不用1,只用其他数字的话也无法构造出另一个1,无法得到两个1。
因此最后我们得到最小的值不可能是1,至少也要是2。
接着来证明最后的最小值是2。
我们直接从当前最大两个数字来构造,一开始用n和n-1得到n,之后就是n和n-2得到n-1,n-1和n-3得到n-2…一直到最后的3和1得到2。
利用这种方式,任何n的数列,都能最后构造得到2,而前面已经论证了1是不可能得到的。

由此直接输出答案2,然后每次合并最大的两个数就可以了。

#include<bits/stdc++.h>
#define ll long long
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;

int32_t main()
{
    IOS;
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        cout<<2<<endl;
        cout<<n<<' '<<n-1<<endl;
        int now=n;
        while(now>2)
        {
            cout<<now<<' '<<now-2<<endl;
            now--;
        }
    }
}

D题
贪心,双指针

题意为给定一个长度为n的只包含0和1的字符串,每次操作你要选择当前字符串中的某一个字符删除,然后继续把剩下字符串的前缀相同的字符全部删掉。问你最多可以操作多少次。

这里直接进行贪心的过程就是了。
每次操作的第二步我们都要吧前缀相同的字符都删掉,也就是我们所有操作的第二步都会删掉一个连续的相同字符的区间,那么我们所有操作的第一步肯定就是尽可能不要减少这些区间的数量。
我们用need记录当前还有多少个第一步要删除的字符,tar指示当前的位置,对于每次操作need+1,对于当前扫到的前缀相同区间长度为L,那么其中最多L-1个是可以用于need的删除的,也就是在前面以及当前操作的时候在第一步被删除。
当剩余长度不足need,或者已经扫到末尾的时候结束循环。

#include<bits/stdc++.h>
#define ll long long
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;

int32_t main()
{
    IOS;
    int t;
    cin>>t;
    while(t--)
    {
        int len;
        string s;
        cin>>len>>s;
        int need=0,tar=0,ans=0;//need指示当前位置后面需要删除多少个,tar为当前位置
        while(1)
        {
            ans++;
            int net=tar;
            while(net+1<len&&s[net+1]==s[tar]) net++;//找相同字符的前缀最右侧下标
            need++;//我们当前位置往后的地方在本次操作要再删一个数
            need=max(0,need-(net-tar));//当前前缀长度-1的数字,可以在前面的操作和当前的操作中贪心删掉
            if(len-net-1<=need||net==len-1) break;//剩余的部分如果比前面操作需要删除的数量多,或者已经扫到末尾了结束循环
            tar=net+1;
        }
        cout<<ans<<endl;
    }
}

E题
贪心,逆序对,冒泡模型类比

题意为给定一个只包含小写字母的字符串,你每次操作只能交换相邻两个位置的字符,问你最少需要进行多少次操作,可以使得字符串翻转过来。

首先对于同一个字母来说,翻转过后的下标都是已知的,我们执行贪心的过程,对同一个字母来说,在原字符串中的下标依次与翻转后的下标从小到大对应,就是最优的情况。
接着我们要求的就是这样的情况最少需要多少次操作,此时我们已经知道最优的方案下翻转后的字符串的每个字符,在原字符串中的下标位置。

注意到我们的操作是交换相邻两个位置的字符,那么我们完全可以把这个过程类比成冒泡排序,我们所需的最少操作次数,就是这些下标位置的逆序对数量,利用树状数组求一下就行了。

#include<bits/stdc++.h>
#define ll long long
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
const ll maxn=2e5+7;

vector<int>origin[26];
int revese[maxn];//reverse[i]记录翻转后的第i个位置,在原来的字符串中是第几个位置
int n;
string s;

int tree[maxn];
void add(int x,int v)
{
    for(;x<=n;x+=x&-x) tree[x]+=v;
}

int sum(int x)
{
    int ret=0;
    for(;x>0;x-=x&-x) ret+=tree[x];
    return ret;
}

int32_t main()
{
    IOS;
    cin>>n>>s;
    for(int i=0;i<n;i++) origin[s[i]-'a'].push_back(i);//26个字母记录从左往右的下标
    for(int i=0;i<26;i++)
    {
        int len=origin[i].size();
        for(int j=0;j<len;j++) revese[n-origin[i][len-j-1]]=origin[i][j]+1;//同一个字母,按照翻转后所在的位置,从左往右依次贪心放进去
        //由于要用树状数组,所以这里让下标变成从1开始
    }
    ll ans=0;
    for(int i=1;i<=n;i++)//利用树状数组求个逆序对,就是冒泡从原序列变成当前序列所需的最少操作次数了
    {
        ans+=i-1-sum(revese[i]);
        add(revese[i],1);
    }
    cout<<ans<<endl;
}
Cadence IC618与Spectre231安装配置全攻略:License、环境变量与依赖检查 EDA工具部署中,License管理与环境变量隔离是核心难点。FlexLM作为通用授权机制,通过守护进程和端口配置实现工具授权;环境变量则控制工具路径与库加载顺序,避免版本冲突。合理配置可确保IC618与Spectre231稳定运行,提升仿真效率。典型应用场景包括模拟IC设计、高校实验室及企业级EDA环境。本文聚焦Cadence IC618与Spectre231的安装实践,详解License配置、环境隔离及依赖检查,助你快速搭建可靠设计环境。 阅读详情

相关推荐

告别代码恐惧!用KRobot图形化编程,10分钟搞定Arduino巡线小车(附完整接线图)

本文介绍如何使用KRobot图形化编程工具快速搭建Arduino巡线小车,无需编写代码。从硬件准备到逻辑构建,详细讲解传感器数据处理、电机控制优化及高级功能扩展,帮助教育工作者和创客爱好者10分钟内完成项目。

weixin_30632089的博客 394

Educational Codeforces Round 96 A-E 题解

https://codeforces.com/contest/1430 A - Number of Apartments 没有仔细思考,直接暴力写了。 枚举5个、7个窗户房子的个数,最多总循环次数1e7 #include<bits/stdc++.h> using namespace std; int main(){ int t = 0; cin>>t; while(t--){ int n; scanf("%d", &n); int i = 0, j

hujin的博客 2822

STMCubeMX使用TB6612驱动编码轮并进行测速

TB6612电机驱动模块通过IN1和IN2引脚控制电机的旋转方向,并通过PWM信号的占空比调节电机速度。代码示例展示了如何使用GPIO控制电机的正反转,以及如何动态调整PWM占空比实现速度控制。系统设计中,TB6612与编码减速电机连接,STM32CubeMX用于初始化GPIO和PWM输出。编码器接口配置使用TIM3进行测速,TIM4定时器用于速度计算。Keil软件中编写的代码包括编码轮计数值获取、速度计算、电机正反转控制以及小车运动控制等功能。通过OLED显示速度,并实现电机的调试与测试。

wwivn的博客 2260

Educational Codeforces Round 42 (Rated for Div. 2) A. Equator

A. Equatortime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputoutputstandard outputPolycarp has created his own training plan to prepare for the prog...

PinesL 485

绕过卡巴斯基通过RPC控制lsass注入DLL

参考国外的XPN以及3gstudent大佬的文章: https://blog.csdn.net/xiangshen1990/article/details/104872566 https://gist.github.com/xpn/93f2b75bf086baf2c388b2ddd50fb5d0 原理:正常的ssp扩展(dll)可以加载到lsass进程中去,比如kerberos验证都是通...

2ed 3524

UE5新手必看:Gameplay框架中的GameInstance与子系统实战指南(含蓝图配置)

本文为UE5新手提供了Gameplay框架中GameInstance与子系统的实战指南。文章深入解析了GameInstance作为全局数据中枢的核心作用与生命周期,并手把手演示了如何创建自定义GameInstance、构建模块化的子系统(如存档管理),以实现跨关卡的持久数据管理。指南旨在帮助开发者构建清晰、可维护的项目架构,解决数据管理混乱的常见痛点。

weixin_29015801的博客 574

2020.1.6 大一寒假训练(栈)

填大一寒假训练第一部分的坑。

Kingrrr的博客行程 430

保姆级教程:用Qlib和LightGBM从零搭建你的第一个AI量化选股策略(附完整代码)

本文提供了一份详细的教程,教你如何使用Qlib和LightGBM从零搭建AI量化选股策略。教程涵盖了环境配置、数据获取、特征工程、模型训练和策略回测等关键步骤,并附有完整代码和常见问题解决方案,适合量化投资初学者快速上手。

weixin_29191081的博客 445

Codeforces Global Round 8 A-D

A:显然 交替加 增大最快 #include <bits/stdc++.h> using namespace std; typedef long long ll; #define ls (o<<1) #define rs (o<<1|1) #define pb push_back const double PI= acos(-1.0); const int M = 1e5+7; /* int head[M],cnt=1; void init(){cnt=1,memse

bjfu170203101的博客 358

信息奥赛课课通(C++)p154-1近似排序

试题描述 读入一对正整数,将这两个数之间(包括这两个数本身)的所有数按下述特别规则排序后输出,该特别规则是按两数倒过来的值进行比较决定其大小,如30倒过来为3,29倒过来为92,则29大于30. 输入要求 1行,包含两个用空格隔开的自然数,这两个自然数给出了待排序数的范围,其中1≤第一个数≤第二个数≤999999999,两个数之差不超过100. 输出要求 输出排序后的数据,每行输出...

mengdicfm的博客 7282

1、工作流介绍

工作流起源于办公自动化,是对软件中业务流程的抽象。通过工作流将各个任务有序组织起来形成一个完整的业务闭环。比如:请假审批流程,网上购物流程,银行贷款流程;!

leyoliu的博客 5108

Educational Codeforces Round 96 (Rated for Div. 2)

今天先补了上一场的div2三道题,做的心神恍惚,然后17点报名没敢提交,先写了4个题剩下的改天补一补 我是真的服信号,卷积卷si我了 A - Number of Apartments 枚举3和5的个数,直接算出来7的个数即可 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<set> #include<map> #include<cmath&

Fighting_Peter的博客 445

Swin Transformer注意力计算复杂度为何比全局注意力少那么多?

本文对比分析了Vision Transformer(ViT)和Swin Transformer的计算复杂度。ViT采用全局注意力机制,计算复杂度为4[hwc^2]+2[(hw)^2C],当图像尺寸较大时计算量显著增加。而Swin Transformer采用窗口注意力机制,将图像划分为M×M的窗口(如7×7),计算复杂度降为4[hwc^2]+2[(hw)(M*M)*C]。以224×224图像为例,Swin Transformer的计算量比ViT减少约900倍,大幅节省了计算资源。文章通过矩阵乘法运算详细推导了

人工智能研究所的博客 62

Educational Codeforces Round 96 (Rated for Div. 2)(A-E题解)

题目大意: 给你一个nnn,求解3x+5y+7z=n3x+5y+7z=n3x+5y+7z=n的解。 思路: 暴力枚举即可。 代码: #include<iostream> #include<vector> #include<cstring> #include<algorithm> #include<map> #include<set> #include<stack> #include<queue> using ..

weixin_43736492的博客 270

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

老版QQ原生表情gif动态

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

Educational Codeforces Round 96 (Rated for Div. 2)[A-E]题解

.

代码笔记本 351

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Educational Codeforces Round 180 (Rated for Div. 2) 题解

nike0good |Oier&ACMer | 熟能生巧 1136

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Educational Codeforces Round 98 (Rated for Div. 2) A-E 题解

Educational Codeforces Round 98 (Rated for Div. 2) A-E 题解 A. Robot Program 题意 给定 x,yx,yx,y ,一个机器人要从(0,0)(0,0)(0,0)点走到(x,y)(x,y)(x,y)点,每次操作能上下左右移动或者不动,且每次操作不能和上次操作相同,问最小操作次数。 思路 面 向 样 例 编 程 其实就是每次向下或向右走,先交替,若到底还需要向右走,则一开始就向右走,之后每走一秒停一秒。反之亦然,不影响答案。 答案为$ x +

avgstuBoboge的博客 2307

Educational Codeforces Round 174(Rated for div2) A-D题解

这一场我没有打,是后面的时候补的,这一场难度感觉还好,其中CD乍一看会觉得比较难,但是仔细想一下就会觉得很简单的了。

W_Sherlock_Henry的博客 715

Educational Codeforces Round 169 (Rated for Div. 2) A~F题解

对于恰好一个点相交的情况需要关掉两扇门,一段相交可以关掉这个区间的所有门以及两端的门,这也与包络的情况类似,但是都要注意这个区间两端有没有门,所以式子为。对于不能直接到达的点,这两个点的颜色一定是互斥的,如果i点颜色是AB,那么j点颜色一定是CD。思路:对于每一次变大操作,我们都不能使得这个数比Alice上一次拿走的数大,否则Alice上次就会拿走当前数(因为我们的操作是游戏开始前一次性离线完成的),所以这个游戏的最优答案就是0。11需要三次操作,11…的操作就可以了,注意k是累计值,而不是单次操作的值。

Fr1nGeLove的博客 1232

Educational Codeforces Round 179 (Rated for Div. 2)

CF2111,简单手速场。

weixin_73725403的博客 1093

Educational Codeforces Round 169 (Rated for Div. 2) (A~D)

手速场,半小时A出3道题,后面直接坐牢1个多小时······,D题看了半天,有思路却不会写,赛后看了一下大佬们的代码确实非常好,我自己是写不出来的,E题博弈论没怎么学,就不补了QVQ。

wh233z的博客 1605

Educational Codeforces Round 172 (Rated for Div. 2) D题题解记录

如果先前的区间的左端点都小于等于当前的区间的左端点,那么我我们只需要找到先前区间中大于等于当前区间右端点的最小右端点。这种规则排序,对于所有已经检查过的区间,记录下他们的右区间。对于当前查询的区间,我们可以通过二分来找到离当前右区间最近的大于等于右区间的位置。,按照同样的逻辑再处理一遍,就可以保证在所谓左区间(实际上是右区间)都囊括的前提下寻找最近的大于等于的右区间(实际上是原来的左区间)。其实左右区间有对称性,我们可以处理右区间的逻辑处理左区间。,都需要查询这样的信息:首先找到所有的区间构成集合。

m0_55592958的博客 2101

Educational Codeforces Round 170 (Rated for Div. 2)

由数据范围我们知道是肯定开不了这么大的,那么这里有一个经典的trick就是,可以把智力和体力表示在一维上,即 记智力和体力的总和为s,体力为x,智力为y,那么 y=s-x。思路:容易发现我们选牌只能选择连续的一段区间,同时右端点一定是单调的,所以我们使用双指针算法就好了。那么其实最终的答案就是Alice多拿主牌的方案数乘以Bob多拿副牌的方案数累加起来,接下来考虑怎么计算方案数。表示前i个位置,智力为j,体力为s-j的最大贡献。地操作,那么我们可以考虑差分。为第i种花色,多拿牌数的总数为j的方案数,那么。

Fr1nGeLove的博客 788

Educational Codeforces Round 176 (Rated for Div. 2)

题目链接CF2075。

weixin_73725403的博客 996

Education Codeforces Round 178 (Rated for Div2) A-E题解

这次Education 相较之前反倒是比较简单的一场,以前看到Education都只能做两题,顶多三题,没想到这次能够把前五题都做出来了(后悔没上大号打了)。这场的E是一个挺有意思的DP,用我的话来讲的话就是链式前向星优化DP

W_Sherlock_Henry的博客 962

[题解] Educational Codeforces Round 168 (Rated for Div. 2) E - level up

用树状数组实时维护出当前队列内大于等于当前玩家等级的怪物的区间数量( 同权值线段树的用法 ), 注意 check 时要减去在当前位置前的等级高于等于玩家的怪物(, 完全可以处理出每个 k 下, 每一个等级时玩家对应的在哪一段.后, 对于每个输入, 只需要二分对应的。, 总的个数是一个调和级数,等级的最早位置, 小于。了, 这个怪就会逃跑.

taulee01 的博客 689
上一篇: Codeforces Round #675 (Div. 2)A-D题解
下一篇: 2020浙江省ACM省赛后记
StandNotAlone
博客等级 码龄7年 338粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值