Codeforces Global Round 10 A-E题解

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 阅读详情

Codeforces Global Round 10 A-E题解
//写于大号rating值2075/2184,小号rating值1887/1887
//这几天刚回家,又鸽了一场,到月底前都要练车,可能要接着鸽下去

A题
简单思维

给定一个长度为n的只包含正整数的数列,你每次操作可以选择相邻的两个值不相等的数字,把它们删去后再把他们的和放回原位置,也就是说每次操作后,数列的长度会减一。
现在需要你输出最后能得到的最短的数列长度。

首先,如果整个数列全部只有一个数字,那么我们没有办法对这个数列做任何操作,只能输出原数列长度n。
当数列包含两个以上的数字时,我们假设初始时候,数列中最大的数字值为X,由于这个数列中除了X外还存在别的数字,因此必然存在一个X,它的相邻位置有不等于X的数字。
我们第一次操作把这个X与和它相邻的不等于X的数字合并后,得到一个新的值Y是大于X的,也就是说,数列中不再存在与Y相等的数,我们之后的操作,每次都用这个最大的数字去和其他数字合并即可,最后必定能使得数组长度变为1。

因此直接判断一下,原数列是否只存在一个数字,如果只有一个数字则输出n,否则输出1。

#include<bits/stdc++.h>
#define ll long long
#define int long long
#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;
        vector<int>num(n);
        for(auto &x:num) cin>>x;
        bool flag=1;
        for(int i=0;i+1<n;i++)
            if(num[i]!=num[i+1]) flag=0;
        if(flag) cout<<n<<endl;
        else cout<<1<<endl;
    }
}

B题
简单思维

给定一个数列(可能存在负数),需要你输出k次操作后,数列中的每个值是多少。
每次操作,当前数列中最大值为d,把这个数列中每个数的值,都变为d减去原数值。

观察第二组样例
原数列中存在负数,最大值为5。

第一次操作后,原数列变为
0 6 1 3 5

可以注意到,原本的负数变为了正数,且绝对值最大的负数变为了当前的最大值,而原本的最大值5的位置变为了0。
也就是说,第一次操作后,我们必定会的得到一个0,并且会使负数全部消失。

当前的数列为仅包含正数和0的数列,在接下来的几次操作后,数列变为
6 0 5 3 1
0 6 1 3 5
6 0 5 3 1
0 6 1 3 5
…

容易注意到这是个以两次操作为一个循环的形式。原因在于,假设当前数列最大值为d,每次操作后,原本数列中的0会变成d(由于数列中不存在负数,d即为此时的最大值),而原数列中的d会变为0。那么下次操作时,数列中的最大值仍然为d,且仍然存在0。
容易观察到这已经构成了两次操作一次循环的条件。

操作数k>=1,因此我们直接对原数列进行一次操作,除去负数且得到一个0。之后由于是两次操作一次循环,所有根据k是否为偶数,决定是否要再进行一次操作即可。

#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;

void change(vector<ll> &num)
{
    ll M=-llINF;
    for(auto x:num) M=max(M,x);
    for(auto &x:num) x=M-x;
}

int32_t main()
{
    IOS;
    int t;
    cin>>t;
    while(t--)
    {
        ll n,k;
        cin>>n>>k;
        vector<ll>num(n);
        for(auto &x:num) cin>>x;
        change(num);
        if(k==1)
        {
            for(auto x:num) cout<<x<<' ';
            cout<<endl;
        }
        else
        {
            if(k%2==0) change(num);
            for(auto &x:num) cout<<x<<' ';
            cout<<endl;
        }
    }
}

C题
贪心,施行

给定一个数列,每次操作你可以选择连续的一段区域,把这个区域的每个值都加上1,问你最少需要多少次操作后,可以使得整个数列变为值不下降的数列。

这里理解下面举得这个例子就可以了

对于数列3 1 2 1 5
我们把这个数列的值看成高度的话,容易发现有两个“谷底”,位置2和位置4的两个1。
如果我们分开操作这两个谷底:
第一次操作后:3 2 2 1 5
第二次操作后:3 3 3 1 5
此时第一个谷底已经被“填平”
第三次操作后:3 3 3 2 5
第四次操作后:3 3 3 3 5
这样是需要4次操作。

然而最优的方案是下面这种:
第一次操作后:3 2 2 1 5
第二次操作后:3 2 2 2 5
第三次操作后:3 3 3 3 5

对于第一个谷底来说,前面出现的最大数字是3,那么最少需要3-1=2次操作才能填平,同理第二个谷底的前面出现的最大数字是3,也需要2次操作才能填平。
但是正如最优方案所演示的那样,对于第二个谷底,原数列3 1 2 1 5,位置3的2是左侧的第一个峰顶,我们只要把位置4的1填到2即可“搭上填平前面谷底的顺风车”。

由此得到一个结论,对于每个谷底,我们只要累加,它左侧的第一个峰顶的值减去当前谷底的值,即为最终答案。

#include<bits/stdc++.h>
#define ll long long
#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--)
    {
        ll n;
        cin>>n;
        vector<ll>num(n);
        for(auto &x:num) cin>>x;
        ll ans=0;
        ll M=num[0],cas=num[0];//M记录当前位置左侧第一个峰顶的值为多少,cas为当前的谷底的值为多少
        for(ll i=1;i<n;i++)
        {
            if(num[i]>=num[i-1])
            {
                ans+=M-cas;
                M=cas=num[i];
            }
            else cas=num[i];
        }
        ans+=M-cas;
        cout<<ans<<endl;
    }
}

D题
规律总结,贪心

n个人站成一个环,每个人都会攻击自己左侧或者右侧的人。
有一个特别规定,如果某个人仅被1个人攻击,那么他攻击的人也必须是攻击他的那个人。而被0个人或者2个人攻击的人,攻击谁是没有限制的。

现在给定初始n个人的攻击方式,询问最少需要改变几个人的攻击方式,可以使得满足上述的特别规定。

观察样例总结一下,我们可以在稿纸上列一下基本的几种情况:
(此时不考虑成环,最右边的人的右侧不是第一个人)
L
R
LL
RR
LR
LRR
LLR
LLRR
这些都是满足特殊固定的情况。
容易证明其他情况全是不满足的。
那么我们总结一下上面的几种情况,实际上它包含了,连续字符不超过2个的所有情况。

我们可以由此把问题转化为,最少通过几次操作,可以使得原字符串中,不存在长度大于等于3的连续区域字符是相同的。

对于原字符串中,原本就存在两种字符的情况,我们直接for一遍扫出每一段字符相同的区域的长度,每长度为3的位置我们放一个与当前区域字符不同的字符即可构造出目标。因此直接对长度除3累加到答案上即可。
特别注意这个字符串是循环的,因此我们需要特别处理一下初始情况下,头和尾字符相等的情况。

另外,原字符串仅包含一种字符的时候,我们在任意一个位置插入一个不同的字符,那么原字符串就变成了长度 1和n-1的两个区域,最后答案就为最开始的1次操作加上(n-1)/3。

#include<bits/stdc++.h>
#define ll long long
#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;
        vector<char>S(n);
        for(auto &x:S) cin>>x;
        bool f=1;
        for(int i=1;i<n;i++) if(S[i]!=S[i-1]) f=0;
        if(f) cout<<1+(n-1)/3<<endl;
        else
        {
            ll ans=0,cas=1;//cas代表当前扫到的连续的相同字符个数
            while(S[0]==S[n-1]){cas++;n--;}//处理头和尾相同的情况
            for(ll i=1;i<n;i++)
            {
                if(S[i]!=S[i-1])//如果当前位置与上一个位置不同,代表当前连续相同区域结束
                {
                    ans+=cas/3;
                    cas=1;
                }
                else cas++;
            }
            cout<<ans+cas/3<<endl;
        }
    }
}

E题
交互,dp,观察数据,构造

交互题(说好的交互题就是二分呢???)
给你一个数值n(最大25),你需要构造一个n ×\times× n的矩阵,每个格子都为一个数值范围在[0,1e16]的值。
之后会给你k个值,为k条从(1,1)出发,只能向右或向下走,直到走到(n,n)的路径上所有数值的和。

要求你还原出这k条路径。

首先容易想到的,用26进制,第一行全部构造260=1,第二行全部构造261=26,第三行全部构造262=676…
用每一位对应的数字,代表第几行我们向右走了多少格。
但是这种方案是不可行的,因为他对我们构造的数值大小有限制,最大不能超过1e16,实际上我们自己写个简单程序检验一下,就能发现这种构造方案,我们需要的数值远远超过了longlong的上限。

那么接着想,我们肯定要构造一个矩阵,使得各个路径得到的值都不同,我们先不管怎么构造。我们先想想怎么从这个值还原出原路径,有一种想法是,记录每一行每个位置的前缀和,dfs暴力枚举我们在每行向右走了几步,但是实际上这种方案必然是会t的。因为我们可以写个简单的dp算出25 ×\times× 25的矩阵的方案数,没记错应该是1e15级别的,这个复杂度dfs到世界末日。
那么我们实际上,通过dp数组已经发现了,方案数就已经很接近题目对我们给定的每个格子构造的数值大小限制上限了。并且这个值很大,我们必然是要通过一种O(1)或者O(logn)的方式,得到在每一个位置向右还是向下走的选择。

这里我想到的是一种,字典序的方案。我们从(1,1)走到(n,n),必然要走n-1次右,和n-1次下,我们把路径方向依次列出来,当做一个字符串,并且人为规定,字符’下‘是大于字符’右’的。
那么很容易得到,从(1,1)一直向右走到底,再向下走到底是数值最小的方案,我们对第一行和最后一列全部构造0,使得这条路径的值为0。
接下里是构造其他路径的过程:
对于任意一个位置(i,j),我们考虑从(1,1)走到(1,j)再走到(i,j)的路径,之后的路径没有限制,容易证明这种考虑方法是包含所有路径的。
对于我们从(1,1)走到(1,j)再走到(i,j)后,由于我们是按照上述字典序大小构造的,从(i,j)向右走的所有方案都是小于向下走的。
对于(i,j)这个位置来说,向右走的方案中,向右走到头再向下走到头是值最小的,向右走一格再向下走到头再向右走到头是值最大的。

我们从第n-1列向左构造,对每一列从上到下构造。
我们用一个x记录从(1,1)走到(1,j)再走到(i,j)后,向右走的最小值,即可通过上一段的路径计算出当前位置的值。(上方和右方都已经被构造了)。
而x的转移,从(i,j)位置转移到(i+1,j)位置,(这里想想上面的字典序,对位置(i,j),向右走的方案的值都是小与向下走的)增加的路径方案数,即为(i,j)向右走到(i,j+1)位置后,走到(n,n)的路径总数。这个我们可以通过预处理dp数组O(1)得到。

构造完毕后,我们可以通过dir数组,dir[i][j]记录从(i,j)出发,向右走一格,再任意走到(n,n)的最大值。(实际上这个路径是向右走一格,向下走到底,再向右走到底)
如果题目给我们的路径数值小于等于这个向右走的最大值,代表我们的方案被包含在向右走的情况里,反之则被包含在向下走到情况里。
由此,我们已经可以做到O(1)得到在每个位置的方向了。

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

ll n;
ll sum;
ll field[30][30];//存储我们构建的矩阵每个位置的值,我们构造的矩阵的所有路线,对于field[i][j]来说,向下走的任意方案,一定比向右走的所有方案得到的值都更大
//以此来得到dir数组,做到O(1)指示我们的路径方向
ll dir[30][30];//dir[i][j]代表从当前位置向右走再到终点,可以获得的最大值,用来指示我们走到(i,j)时应该向下还是向右走
//实际上这个路线是先往后走一步,再向下走到底,再向右走到底
ll Data[30][30];//Data[i][j]代表从(i,j)走到(i,n)得到的值,就是一个反向的前缀和,辅助计算
ll dp[30][30];//dp[i][j]存储从(1,1)走到(i,j)有几种方案

void getdp()
{
    dp[1][0]=1;
    for(ll i=1;i<=25;i++)
    {
        for(ll j=1;j<=25;j++)
        {
            dp[i][j]=dp[i-1][j]+dp[i][j-1];
        }
    }
}

void getfield()
{
    for(ll i=1;i<=n;i++) field[1][i]=field[i][n]=0;//构造第一行和最后一列为0
    ll x=1;//x为对于(i,j)位置来说,从(1,1)先向右走到(1,j),再向下走到(i,j),再向右的最小值,即继续向右走到底再向下走到底
    for(ll j=n-1;j;j--)
    {
        ll temp=0;//temp记录当前field[i][j]的上方所有值的和
        for(ll i=2;i<=n;i++)
        {
            //见x代表的值
            //第一行和最后一列我们构造的全为0,因此只需要让x减去field[i][j]上方和右方的累加值即为field[i][j]应当构造的值
            field[i][j]=x-temp-Data[i][j+1];
            temp+=field[i][j];//累加竖直上方的前缀和
            Data[i][j]=field[i][j]+Data[i][j+1];//累加右方的前缀和
            x+=dp[n-i+1][n-j];//对于field[i][j]来说,它第一步向右走,再走到终点的情况即为[n-i+1,n-j]的矩阵的方案数
            //那么对于field[i+1][j]来说,它向右走的最小值就应该比field[i][j]的最小值加上对应的dp值方案数
        }
    }
}

void getdir()
{
    for(ll i=1;i<=n;i++)
    {
        for(ll j=1;j<n;j++)
        {
            for(ll k=i;k<=n;k++)
                dir[i][j]+=field[k][j+1];
            for(ll k=j+2;k<=n;k++)
                dir[i][j]+=field[n][k];
            dir[i][j]+=field[i][j];
        }
    }
}

int32_t main()
{
    IOS;
    cin>>n;
    getdp();
    getfield();
    getdir();
    for(ll i=1;i<=n;i++)
    {
        for(ll j=1;j<=n;j++)
            cout<<field[i][j]<<' ';
        cout<<endl;
    }
    ll k;
    cin>>k;
    while(k--)
    {
        cin>>sum;
        ll nowr=1,nowc=1;//nowr为我们当前所在行,nowc为我们当前所在列
        while(nowr<=n&&nowc<=n)
        {
            cout<<nowr<<' '<<nowc<<endl;
            if(dir[nowr][nowc]<sum||nowc==n) {sum-=field[nowr][nowc];nowr++;}
            //如果我们当前的值,比向右走得到的最大值都大的话,代表当前方案应该在下方
            else {sum-=field[nowr][nowc];nowc++;}
            //如果我们当前的值,比向右走得到的最大值要小或等于,代表当前方案应该在右侧
        }
        cout<<endl;
    }
}
编程笔试(解析及代码实现):序列重排之给一个长度为n的序列A,求找出某种排列方式使得相邻两个数的差值之和最大并求出该最大值 编程笔试(解析及代码实现):序列重排之给一个长度为n的序列A,求找出某种排列方式使得相邻两个数的差值之和最大并求出该最大值 目录 题目描述 代码实现 题目描述 序列重排:给一个长度为n的序列A,求找出某种排列方式使得相邻两个数的差值之和最大并求出该最大值 给一个长度为n的序列A,你可以将序列中的元素按任意顺序重新排列,请你找到一种排列方式使得相邻两个数的差值之和最大,你只需要输出这个最大值即可。换句话说,假设重排后的序列是B,你需要使 |B1- B2|+ |B2- B3 阅读详情

相关推荐

软件项目管理期末复习(看这一篇就够了)

软件项目管理考试复习 🔶🔶🔶🔶🔶加了🔶的是考点 第一章软件项目管理概述 1.1.1项目及其特征 项目定义:🔶 项目就是为了创造一个唯一的产品或提供一个唯一的服务而进行的临时性的努力; 是以一套独特而互相联系的任务为前提,有效地利用资源,在一段时间内满足一系列特定目标的多项相关工作的总称。 日常运作和项目的区别: 项目是一次性的,而日常运作是重复进行的。 项目是以目标为导向的,日常运作是通过效率和有效性体现的。 项目是通过项目经理及其团队工作完成的,日常运作是职能式的线性管理。 项目存在大量的变更管理,

qq_50886857的博客 3万+

Codeforces1119D 排序二分 区间内贡献

https://codeforces.com/contest/1119/problem/D 排序后求n-1个差值 差值为前一个能提供不同数的贡献 对差值数组排序二分,小于查询的区间长度提供差值的贡献 否则提供区间长度的贡献 ll n; int q; ll a[maxn],cha[maxn],pre[maxn]; int main() { IO; cin>>n; for(int i...

qq_40423146的博客 334

InVEST模型实战指南:从水源涵养到热岛缓解的生态系统服务评估

本文提供了InVEST模型的实战指南,详细介绍了从环境搭建、数据预处理到核心模型应用的完整流程。通过水源涵养、碳存储、土壤保持和城市热岛缓解等核心模型的拆解,帮助生态学者与规划者系统量化评估生态系统服务,将复杂的生态价值转化为直观的空间数据与地图,为科学决策提供有力支撑。

weixin_29197051的博客 430

2023年14界蓝桥杯省赛题解

2023年省赛14界蓝桥杯c/c++b组、A、日期统计、B、01串的熵、C、冶炼金属、D、飞机降落、E、接龙数列、F、岛屿个数、G、子串简写

Ten_years_star的博客 4841

Unity3D实战:用EasyAR4.0稀疏空间地图打造AR导航应用(附完整代码)

本文详细介绍了如何使用Unity3D和EasyAR4.0的SparseSpatialMap功能构建AR导航应用。通过稀疏空间地图技术,开发者可以创建室内导航系统,解决传统GPS在室内环境中的局限性。文章包含完整代码示例,涵盖环境配置、地图构建、导航实现及性能优化等关键步骤,助力开发者快速掌握AR导航开发技巧。

t8u9v0的博客 1197

MATLAB 2026最新版免费下载安装教程:许可证激活与报错排查

科学计算与仿真在工程实践中扮演着核心角色,MATLAB 作为业界标准平台,凭借矩阵运算、数据可视化和 Simulink 仿真能力,成为高校课程设计与科研实验中的高频工具。理解其许可证机制是正确安装与持续使用的关键:官方提供试用版、学生版、家庭版及校园许可证等多种合法获取途径,安装包由引导器、工具箱文件与授权信息组成。掌握从下载到激活的完整流程,并根据操作系统进行环境配置与工具组件选装,不仅能规避安全风险,还能显著提升工程效率。针对安装过程中常见的许可证校验失败或工具箱不可用等问题,提供系统化排查思路与命令行

weixin_30702441的博客 2643

DP25 删除相邻数字的最大分数

DP25 删除相邻数字的最大分数,牛客,动态规划

qq_42434171的博客 818

从零开始:用LabVIEW和ModbusTCP协议,像搭积木一样连接Delta PLC

本文详细介绍了如何利用LabVIEW的图形化编程环境和ModbusTCP工业协议,快速连接Delta PLC实现数据通信。通过模块化配置和实战案例,指导读者无需编写复杂代码即可完成寄存器读取、多数据类型处理及系统监控,显著提升工业自动化项目的开发效率与部署速度。

n8m7b6v5c4的博客 697

如何用Java解决给定一个长度为 N 的数列 A1,A2,⋅⋅⋅,AN。 现在小蓝想通过若干次操作将这个数列中每个数字清零。 每次操作小蓝可以选择以下两种之一: 选择一个大于 0 的整数,将它减去 1...

你可以使用以下步骤解决这个问题: 读取输入,分别为数组的长度 N 和连续数字的数量 K,以及数组 A。 创建一个变量来记录操作的次数。 使用一个循环,在数组中的每个数字都大于 0 的情况下进行如下操作: 在数组中找到最小的数字,并将它减去 1。 在数组中找到最多连续 K 个大于 0 的数字,并将它们各减去 1。 增加操作次数的计数器。 重复步骤 3 到 6,直到数组中所有的数字都是 ...

weixin_35755823的博客 351

BambuStudio学习笔记:OpenCSG - 实时构造实体几何(CSG)渲染的 OpenGL 方案

**OpenCSG** 是一个基于 **OpenGL** 的 **构造实体几何(CSG)** 实时渲染库,通过 **深度剥离算法** 实现布尔运算(并集、交集、差集)的可视化。其核心目标是简化复杂几何体的交互式建模,适用于 CAD 原型设计、3D 打印预览、教育工具等场景。

zzzkk2009的专栏 929

openpi 入门教程(二)droid libero 训练、推理

OpenPI是由物理智能团队发布的机器人领域开源模型与软件平台,提供基于流扩散式(π₀)和自回归式(π₀-FAST)两类视觉-语言-动作模型。平台支持在DROID、ALOHA、UR5等多种机器人系统上部署,包含预训练检查点(1万+小时数据)和微调示例。文档详细说明了各平台部署流程:DROID需启动策略服务器并配置摄像头;ALOHA提供真实机器人任务(取吐司、叠毛巾等)的检查点和场景设置建议;UR5示例展示自定义数据转换方法。实验性验证显示π₀-FAST在LIBERO基准测试中平均得分85.5。平台强调模型适

2506_90492529的博客 1023

Codeforces Global Round 10

文章目录Codeforces Global Round 10A. Omkar and PasswordB. Omkar and Infinity ClockC. Omkar and WaterslideD. Omkar and Bed WarsE. Omkar and Duck参考 Codeforces Global Round 10 A. Omkar and Password 题意: 给你一个序列,现在这个序列中可以将相邻的不同的元素相加,可以重复若干次,问最后的会剩下几个元素。 题解: 仔细分析可知,不

m0_49959202的博客 286

MimicKit 人形机器人强化学习全身模仿控制算法使用教程

本文介绍了MimicKit运动模仿算法框架的使用指南。主要内容包括:1)安装IsaacGym和依赖项;2)训练模型命令及参数说明;3)测试模型的方法;4)分布式训练配置;5)使用TensorBoard可视化日志;6)动作数据格式说明。该框架支持DeepMimic、AMP、ASE、ADD等算法,包含PPO、AWR等强化学习算法,适用于物理仿真角色动画控制研究。

机器人控制与仿真应用 1203

Codeforces Global Round 17题解A-D

Codeforces Global Round 17 A. Anti Light’s Cell Guessing 分析: 考虑0的情况就行了。 代码: #include <bits/stdc++.h> using namespace std; //#pragma GCC optimize(2) #define close(); ios::sync_with_stdio(false); #define endl '\n' #define rep(i, l, r) for(int i = l; i

Arctic_Clam的博客 1346

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Codeforces Global Round 27(A-D)

Codeforces Global Round 27(A-D)

ju_ruo_ruo的博客 1308

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

【补题】Codeforces Global Round 26 E. Shuffle

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

2401_87294509的博客 1811

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Codeforces Global Round 1题解报告

Codeforces Global Round 1题解报告 A. Parity 题意 模2意义下的秦九韶。 题解 模2意义下的秦九韶。 代码 #include&amp;amp;amp;amp;lt;bits/stdc++.h&amp;amp;amp;amp;gt; int ri() { char c = getchar(); int x = 0, f = 1; for(;c &amp;amp;amp;amp;lt; '0' || c &amp;amp;am

maxtir的博客 494

【解题报告】Codeforces Global Round 17 | A ~ E

【解题报告】Codeforces Global Round 17A:Anti Light's Cell Guessing题意思路代码B:Kalindrome Array题意思路代码C:Keshi Is Throwing a Party题意思路代码D:Not Quite Lee题意思路代码E:AmShZ and G.O.A.T.题意思路代码 【解题报告】Codeforces Global Round 17 A:Anti Light’s Cell Guessing 题意 Anti Light’s Cell

溢流眼泪的博客 1326

Codeforces Global Round 13 A-E题解

A 01序列,一个操作对某一位取反,一个操作问你当前第k大是多少 维护一个当前最后一个1所在排名 #include <cstdio> using namespace std; const int MAX_N = 100025; int arr[MAX_N]; int main() { int n,m,sum = 0; scanf("%d%d",&n,&m); for(int i = 1;i<=n;++i) { scanf("%

我是谁 --- 卡比兽 468

Codeforces Global Round 27 E 根号做法

题解

2301_78527293的博客 1103

Codeforces Global Round 2 题解

Codeforces Global Round 2 题目链接:https://codeforces.com/contest/1119 A. Ilya and a Colorful Walk 题意: 给出n个数,问从一个数到另外一个不同数的最长距离是多少。 题解: 从前往后,从后往前扫两遍即可。证明可用反证法,这里略去。 #include <bits/st...

dft539533的博客 241

Codeforces Global Round 20题解

Codeforces Global Round 20题解 A. Log Chopping 实现思路 我们可以发现如果长度为xxx,那么我们可以切x−1x - 1x−1刀,所以我们统计出来一共要砍多少刀即可 代码实现 /* * @Description: 电影和人生不一样,电影太仁慈了,人生太辛苦了 * @优快云: https://blog.youkuaiyun.com/godhandsjoker?spm=1000.2115.3001.5343 * @Github: https://github.com/god.

godhandsjoker的博客 747

Codeforces Global Round1 简要题解

Codeforces Global Round 1 A 模拟即可 # include &lt;bits/stdc++.h&gt; using namespace std; typedef long long ll; int b, k, n, a[232333]; int main() { int i, base = 1, v; scanf("%d%d", &amp;b, &amp;k); ...

Cyhlnj 296

Codeforces Global Round 29 (Div. 1 + Div. 2)题解报告

用cnt记录0的个数,stat记录是否出现11,初始时如果第一位为1则stat为1,否则为0,然后从前往后遍历,如果出现00,就把stat置为0,如果出现11且stat=1且前面出现了奇数个0,结果一定是no,如果stat=1和cnt为奇有一个不满足就把stat置为1,cnt=0,继续往后遍历,最后还要判断一下最后一位为1的话,stat=1时cnt是奇数还是偶数,如果是奇数结果一定是no,其他情况下都是yes,stat是为了判断是不是1开头的子串,cnt统计该子串的个数。其他情况下,如果x等于y,无解;

2401_87281290的博客 1031

Codeforces Global Round 10 E Omkar and Duck

Omkar and Duck 题目链接 题目大意 这是一个交互题, 你先给出一个矩阵,然后输入权值,这个权值是矩阵中(1,1)点到(n,n)点的路径上的权值和。让你输出这个路径。 所以要保证每种走法的路径权值和都不一样。 题解 做的时候想到了,可能的权值是0~x (x是走法的数量)。 但是不会构造,,画了好多,没构造出来。。 其实只要让x步后所能到达每个点的权值范围都不一样即可。 x步能到达的点就是左下到右上对角线上的点。, 所以只要让从1,1点到每个对角线上的每个点的权值范围不同即可。 这样的话,就可以一

qq_44784019的博客 290

Codeforces Global Round 11

文章目录Codeforces Global Round 11A. Avoiding ZeroB. Chess CheaterC. The Hard Work of PaparazziD. Unshuffling a DeckE. Xum Codeforces Global Round 11 A. Avoiding Zero 题意: 给定一个长度为n的数组a,问是否能够将a数组位置改变形成b数组,使得b数组的所有前缀和都不等于0. 题解: 本题是构造题,如果正数的和大于负数和的绝对值,那么只需要将正数放在前面

m0_49959202的博客 265
上一篇: Educational Codeforces Round 93 (Rated for Div. 2)A-E题解
下一篇: Codeforces Round #665 (Div. 2)A-D题解
StandNotAlone
博客等级 码龄7年 338粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值