Grakn Forces 2020A-F题解

Grakn Forces 2020 A-F 简要题解 Grakn Forces 2020A−F\mathrm{Grakn\ Forces\ 2020 A-F}Grakn Forces 2020A−F 简要题解 Grakn Forces 2020 注:若题目为多组数据 nnn 表示 ∑n\sum n∑n A 由于题目保证 ai≠bi≠cia_i ≠ b_i ≠ c_iai​​=bi​​=ci​ 所以直接逐位判断选什么即可,时间复杂度 O(n)O(n)O(n) code B 贪心地加数,直至这个序列不能加数增加一个序列, 阅读详情

Grakn Forces 2020A-F题解
比赛链接:https://codeforces.com/contest/1408

A题
水,简单构造施行

题意为给定三个长度为n的数列a[],b[],c[],其中对于每个i值,a[i],b[i],c[i]的值相互之间不相同。现在你需要构造一个新的长度为n的数列d[],d[i]需要在a[i],b[i],c[i]中选择一个值,并且d[]这个数组相邻之间的数值不相等(包括首尾)。

直接记录一下上一个位置构造了什么什么数字就可以了,除了末尾位置构造的时候还要同时考虑一下和头部的数字不同即可。

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

int a[107],b[107],c[107];

int32_t main()
{
    IOS;
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        for(int i=0;i<n;i++) cin>>a[i];
        for(int i=0;i<n;i++) cin>>b[i];
        for(int i=0;i<n;i++) cin>>c[i];
        int now=-1;
        for(int i=0;i+1<n;i++)
        {
            if(a[i]!=now) now=a[i];
            else if(b[i]!=now) now=b[i];
            else now=c[i];
            cout<<now<<' ';
        }
        if(a[n-1]!=now&&a[n-1]!=a[0]) now=a[n-1];
        else if(b[n-1]!=now&&b[n-1]!=a[0]) now=b[n-1];
        else now=c[n-1];
        cout<<now<<endl;
    }
}

B题
贪心,构造

题意为给定一个长度为n的单调不下降的只包含非负整数的数列a[],你需要构造m个数列b[],每个b[]数列中不同的数字不能超过k个,a[i]的值要等于这m个b[i]值的和。现在询问你m的最小值。

贪心去构造就是了,我们把问题转化为从a[]中减去b[]的值,我们的目标是把整个a[]都变为0
直接按照a[]数列中原本的数字尽可能去构造,我们第一次最多能构造出k个不同的数字,能把a[]中的k个不同的数字(包括0)变为0,之后的a[]中0会一直存在,我们每次最多能将k-1个不同的数字(不包括0)变为0。
由此可以推得,用cas表示a[]数列中有几个不同值的数字

当k=1的时候,我们只能对原数列清除1个数字(包括原有的0)
如果cas=1,m=1
如果cas>1的话,就是无法把原数列全部清零的情况,输出-1

当k>1的时候,我们的第一次可以清除k个数字,之后每次只能清除k-1个数字
当cas<=k的时候,m=1
当cas>k的时候,m=1+(cas-k)/(k-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;

int32_t main()
{
    IOS;
    int t;
    cin>>t;
    while(t--)
    {
        int n,k;
        cin>>n>>k;
        int now=-1,cas=0;//cas记录整个数列中有几个不同的数
        for(int i=0;i<n;i++)
        {
            int x;
            cin>>x;
            if(x!=now) cas++;
            now=x;
        }
        if(k==1)
        {
            if(cas>1) cout<<-1<<endl;
            else cout<<1<<endl;
        }
        else
        {
            int ans=1;//第一次可以消除k个不同的数字为0
            if(cas>k) ans+=(cas/*-k+k*/-2)/(k-1);//之后每次消除k-1个不同的数字为0了,此时计算(ans-k)/(k-1)向上取整的结果
            cout<<ans<<endl;
        }
    }
}

C题
施行,简单讨论

题意为在长度为l的一段路上,两辆车分别从左右两个端点出发向对方驶去,初始速度均为1/s,这段路上有n个站点,车子每经过一个站点,速度+1/s,询问你经过多少时间两车相遇。

直接for两遍可以处理出不管相交的情况下,两辆车分别经过每个节点的时间情况。
根据站点和两个端点我们可以把整段路分成n+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;
const ll maxn=1e5+7;

double timea[maxn],timeb[maxn];//timea记录左边的汽车开到每个点要用的时间,timeb记录右边汽车的
int dis[maxn];

int32_t main()
{
    IOS;
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n>>dis[n+1];
        for(int i=1;i<=n;i++) cin>>dis[i];
        timea[0]=timeb[n+1]=0;
        for(int i=1;i<=n+1;i++)
        {
            timea[i]=timea[i-1]+(dis[i]-dis[i-1])/(double)i;
        }
        int tar;
        for(tar=n;1;tar--)//tar记录在dis[tar]到dis[tar+1]之间辆车相遇,时间点满足timea[tar]<=timeb[tar]
        {
            timeb[tar]=timeb[tar+1]+(dis[tar+1]-dis[tar])/(double)(n+1-tar);
            if(timeb[tar]>=timea[tar]) break;
        }
        if(timea[tar]>timeb[tar+1])//分两种情况分类讨论计算,步骤分开写了方便理解
        {
            double ans=timea[tar];
            double d=dis[tar+1]-dis[tar]-(timea[tar]-timeb[tar+1])*(n+1-tar);
            ans+=d/(tar+1+n+1-tar);
            cout<<fixed<<setprecision(10)<<ans<<endl;
        }
        else
        {
            double ans=timeb[tar+1];
            double d=dis[tar+1]-dis[tar]-(timeb[tar+1]-timea[tar])*(tar+1);
            ans+=d/(tar+1+n+1-tar);
            cout<<fixed<<setprecision(10)<<ans<<endl;
        }
    }
}

D题
暴力,思维,贪心

题意为n个人m盏灯在一个二维平面上。当且仅当一个人的横坐标和纵坐标均不大于某一盏灯的横纵坐标,这个人会被这盏灯发现。现在你需要使用最少次数的操作,使得所有人都不被任何一盏灯发现。
每次操作你可以使得所有人的位置横坐标+1,或者使得所有人的位置纵坐标+1。
需要输出最少的操作次数。

此题中n和m的范围都较小,只有2000,并且横纵坐标的值也相对较小,只有1e6。常规的暴力和直接二分横(纵)坐标的增加值的思路都很难得到结果。但是我们可以通过在暴力法上增加一定的“范围”来解决这次的问题。

由于n和m的值都较小,因此直接暴力n×\times×m是可行的,我们讨论每一个人对应每盏灯。
第i个人对于第j盏灯来说,当x的增加值不高于max(0,c[j]-a[i])的时候,那么y的增加值就必须不小于d[j]-b[i]的值。
我们可以用cas[i]在暴力过程中记录x的增加值不超过i的时候y需要增加的最大值,由于此时我们记录的是单点数据,并没有真的对0到c[j]-a[i]这个区间都进行了修改,因此暴力结束之后还需要反向for一遍x增加值,用y记录这一过程中的y需要增加的最大值即可。

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

int n,m;
int a[maxn],b[maxn],c[maxn],d[maxn];
int cas[1000007];//cas[i]记录的是在对x选择增加的值最大为i的情况下,需要对y增加的最小值。注意此处仅对单个灯的情况进行了考虑,并不是完全的

int32_t main()
{
    IOS;
    cin>>n>>m;
    for(int i=1;i<=n;i++) cin>>a[i]>>b[i];
    for(int i=1;i<=m;i++) cin>>c[i]>>d[i];
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(c[j]>=a[i]) cas[c[j]-a[i]]=max(cas[c[j]-a[i]],d[j]-b[i]+1);//对于每个灯,如果x的移动没有使得第i个人离开了第j盏灯的范围,那就需要在y上进行移动
        }
    }
    int ans=INF,y=0;
    for(int i=1000001;i>=0;i--)//cas[i]记录的值并不完备,对与i=x的情况,i>x的所有情况对应的y上限也应该被满足,因此反向for一遍取一下最小值即可
    {
        y=max(y,cas[i]);
        ans=min(ans,i+y);
    }
    cout<<ans<<endl;
}

E题
模型转换,最大生成树

题意为有n个节点编号为1到n,有m个点集合编号为1到m。每个点集中都包含一些编号在1到n之间的节点,第i个点集中的点两两之间有一条颜色为i的边。在这样构成的图中,现在你可以进行任意次在某个点集中删除掉某一个结点的操作,给定两个数组a[m]和b[n],在第i个点集中删除节点j的操作消耗值为a[i]+b[j],现在询问最少消耗多少值,可以使得最后的图中不存在某个环路中,每条边的颜色都不同。

不得不说300iq出的题都非常精妙…这道题将n个结点和m个颜色都看成另一个新图中的n+m个结点,原图中存在环路每条边的颜色都不相同就被转化为了新图当中存在闭环。原问题就被转化成了记录新图中删除所有边需要的消耗值减去新图中最大生成树的消耗值。

#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=1e5+7;

ll fa[2*maxn],a[maxn],b[maxn];
ll n,m;

void init()
{
    for(ll i=0;i<n+m;i++) fa[i]=i;
}

ll get(ll x)
{
    return x==fa[x]?x:fa[x]=get(fa[x]);
}

void merge(ll x,ll y)
{
    fa[get(x)]=get(y);
}

struct Node
{
    ll u,v,len;
};

vector<Node>node;

bool cmp(Node a,Node b)
{
    return a.len>b.len;
}

int32_t main()
{
    IOS;
    cin>>m>>n;
    init();
    for(ll i=0;i<m;i++) cin>>a[i];
    for(ll i=0;i<n;i++) cin>>b[i];
    ll ans=0;
    for(ll i=0;i<m;i++)
    {
        ll s;
        cin>>s;
        for(ll j=0;j<s;j++)
        {
            ll x;
            cin>>x;
            node.push_back({x-1,n+i,a[i]+b[x-1]});
            ans+=a[i]+b[x-1];
        }
    }
    sort(node.begin(),node.end(),cmp);
    for(ll i=0;i<node.size();i++)
    {
        if(get(node[i].u)==get(node[i].v)) continue;
        ans-=node[i].len;
        merge(node[i].u,node[i].v);
    }
    cout<<ans<<endl;
}

F题
构造,二分,思维。

题意为给定一个长度为n的初始数列a[],a[i]=i。(n最大值为15000)
现在你每次操作选定两个下标i和j,将a[i]和a[j]同时改变为f(a[i],a[j])的值。f(x,y)函数为一个两个参数的函数,对相同的一对x和y,会返回一个同样的数值。
最多对这个数列进行500000次操作,使得这个数列最多存在两个不同的数字。输出构造方法。

首先显而易见的,两个不同的位置进行操作后值变为相同,得到一个长度为2的值相同的区间。
再之后也容易推得,两个长度均为l的区间,我们把这两个区间的数字一一配对操作l次后可以使得总共的2l区间的数值变成相同的。
利用上面两个结论,我们可以用二分的方式使用nlogn的操作次数将任意的2的整数次幂长度的区间变为相同的数值。

然后问题在于,n的值不一定是2的整数次幂长度,可能会有一段剩余的部分。
这个部分如果要和前面已经构造值相同的部分继续值相同,构造方式非常难想。
但是注意到题目要求是最后数列是可以存在两个不同的数值的…因此我们寻找最小的长度temp值满足temp是2的整数次幂,且2×\times×temp>=n。然后我们在整段n的区间的最左侧和最右侧各自对temp长度进行上述的二分构造操作,就必定能使得整个数列变为由最多两个值构成了。
比如长度为7,第一次对1-4区间操作,第二次对4-7区间操作。
这样操作之后就会得到x,x,x,y,y,y,y的最终数列。

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

struct Node
{
    int a,b;
};

int n;
vector<Node>node;

void qsort_bushi(int l,int r)//类似快排的递归写法,对长度为2的整数次幂的部分进行区间合并,左边的一半和右边的一半一一对应进行操作
{
    if(l==r) return;
    int mid=(l+r)>>1;
    qsort_bushi(l,mid);
    qsort_bushi(mid+1,r);
    while(l<r) node.push_back({l++,r--});
}

int32_t main()
{
    IOS;
    cin>>n;
    int temp=1;
    while(temp*2<n) temp<<=1;//寻找一个最小的2的整数次幂,其两段区间可以覆盖整个n的长度
    qsort_bushi(1,temp);//进行一次操作后1到temp的区间都变成了相同的数字
    qsort_bushi(n-temp+1,n);//进行一次操作后n-temp+1到n的区间都变成了相同的数字
    cout<<node.size()<<endl;
    for(int i=0;i<node.size();i++) cout<<node[i].a<<' '<<node[i].b<<endl;
}
DeepSeek本地部署实战:消费级硬件跑128K上下文大模型 大语言模型本地化运行正从技术理想走向工程现实。其核心原理在于模型量化、内存带宽协同与推理引擎深度调优,技术价值体现在数据主权保障、零API成本及可审计的推理过程。典型应用场景覆盖法律合同分析、技术文档问答、私有代码补全等强隐私或低延迟需求领域。本文聚焦DeepSeek-R1系列在RTX3060、M1 Mac、老旧台式机等消费级硬件上的稳定部署,深入解析Q4_K_M量化选择、CUDA统一内存调度、--n-gpu-layers黄金公式及128K上下文实操验证,为开发者提供可复现、可量化的离线AI落地路径。 阅读详情

相关推荐

如何在VSCode中无缝集成Azure OpenAI GPT-5-codex?保姆级配置教程

本文详细介绍了在VSCode中无缝集成Azure OpenAI GPT-5-codex的完整配置教程,涵盖环境准备、Azure资源创建、本地配置、VSCode插件安装及高级定制。通过Codex CLI和config.toml文件配置,开发者可快速实现AI辅助编程,大幅提升代码生成、错误诊断和文档编写效率。

weixin_29268637的博客 555

Codeforces Grakn Forces 2020 题解(CDE)

C.Discrete Acceleration 发现自己傻了,这题明明可以直接O(n)模拟,我却写了个二分,但其实我的这个二分还是O(n)的复杂度,因为之前O(n)处理了左右端点到每个点的时间。 我的傻逼写法: #include<iostream> #include<cstring> #include<cstdio> #include<algorithm> #include<vector> #include<map> #include&

REXWind的博客 312

shopee app算法分析第一篇

shopee app算法分析第一篇分析完整算法大概要好几篇,耐心等待下.国内只会发律师函,牛逼,一个律师套话,一个律师发函,大意了(警惕卡通律师头像),希望law可以保护好你,还是干国外好.

2531

Grakn Forces 2020(ABCD)

A. Circle Coloring 签到,abc三个数组找到一个符合要求的就行了 #include <bits/stdc++.h> using namespace std; int a[105],b[105],c[105]; int main(){ int t;cin>>t; while(t--){ int n;cin>>n; for(int i=1;i<=n;i++)cin>>a[i];

YeHosea的博客 2174

CCS安装教程图解说明:可视化步骤快速上手

通过清晰的图解步骤详解CCS安装过程,帮助新手快速掌握环境搭建。结合ccs安装教程与实际操作界面,每一步都直观易懂,大幅降低学习门槛,提升配置效率。

weixin_42611310的博客 963

STM32驱动HC-SR04超声波模块

本篇文章将带大家使用HAL库驱动HC-SR04超声波模块。超声波模块作为智能小车必备的模块,要学习智能小车的同学是必须掌握好这个模块的使用的。HC-SR04是一种常用的超声波传感器模块,也被称为超声波测距模块,广泛应用于各种自动化控制和测距系统中。它通常由超声波发射器、接收器、控制电路和外壳组成,可以实现非接触式的距离测量。下面是HC-SR04超声波模块的一些特性和技术参数:距离测量范围:2cm ~ 400cm(可调)。测量精度:0.3cm。工作电压:DC 5V。工作电流:15mA。

m0_49476241的博客 7683

Grakn Forces 2020——D题Pecco模型总结

今天是双节但是为什么我今天好自闭啊啊啊,自己在寝室自闭了一下午,好无聊。明天一定要精神满满啊! A - Circle Coloring 签到题 #define IO ios::sync_with_stdio(false);cin.tie();cout.tie(0) #pragma GCC optimize(2) #include<iostream> #include<algorithm> using namespace std; const int N=110; int a[N],c

Fighting_Peter的博客 2024

做了一个3DTiles编辑器,支持3DTiles的预览和裁剪导出

3DTiles编辑器的功能极其简洁,核心就是3DTiles格式模型的预览和裁剪。为了演示方便,本文所使用的源数据为mipmap3d[1]网站所提供的无人机拍摄影像,并进行3DTiles构建。打开软件,输入的绝对路径之后,点击添加模型,就可以将模型加载进预览区。之后,点击裁剪模式按钮,默认会出现立方体裁剪框,可通过拖动句柄的方式去调整裁剪框的范围。同时,除了默认的盒体裁切模式外,还支持多边形裁切,点击多边形裁切后,可切换到顶视图,选择重绘多边形,可进行打点绘制。

兴趣使然的创作者 601

Grakn Forces 2020 D E F

D n个人,m个摄像坐落于二维平面上,x,y位置摄像能监视到的范围为(0 x, 0 y)每次移动可以选择将所有人x+1,或者将所有人y+1;问最少移动次数使得所有人都不在监视范围内;坐标<1e6 考虑枚举操作x+1多少次,然后O1计算此时还需要操作y+1多少次来更新答案。 mx[i][j]表示第i个人执行x+1 j次后还需要执行 y+1 的次数。 那么所有人执行j次x+1后 还需执行y+1 的最少次数就为 max(mx[1~n][j]) 预处理即可。 E MST 好题 题意:有m个由1~n中的若干不同

qq_43914084的博客 1797

[PCIe5.0] 3.4.1 Flow Control Initialization State Machine Rules

流控初始化是PCIe链路中每个虚拟通道(VC)启用的必经流程,分为FC_INIT1和FC_INIT2两个阶段,确保发送端与接收端的缓冲区信用值协商一致。

系统固件工程师 139

【RT-DETR涨点改进】独家创新改进篇 | AAAI2024 | RT-DETR引入CFBlock增强对长程依赖和全局语义信息的建模能力,有助于提升复杂场景下小目标、遮挡目标的检测精度

本文给大家介绍在RT-DETR中引入CFBlock模块,能够有效提升模型对长程依赖和全局语义信息的建模能力,在保持轻量化和高效推理的基础上增强特征表达力,特别有助于提升复杂场景下小目标、遮挡目标的检测精度,从而实现更优的精度与速度平衡。

Ai缝合怪、助力小伙伴高效发论文 260

Grakn Forces 2020 F. Two Different

思路: 任意一个2的幂次大小的n最后都可以只剩下一个数字; 例如1 2 3 4 5 6 7 8: 1 2;3,4;5,6;7,8 这样就剩下4个不同的数:1 1 2 2 3 3 4 4; 再1 3;2 4;5 7;6 8就剩下2个不同的数了:1 1 1 1 2 2 2 2 。 那么我们将n用最小的两个2幂次覆盖,然后递归的处理即可。 #pragma GCC optimize(2) #pragma GCC optimize(3) #include <bits/stdc++.h> using na

pubgoso的博客 214

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Grakn Forces 2020 B. Arrays Sum

题目链接 题意: 给你一个长度为n的a数组,问你这个数组最少能由几个只含k个不同数的b数组对应位置相加的得到。 思路: 第一个b数组可以得到a中前k个不同的数,但是从第一个b数组之后的数组必须有一个数为0来让前面已经变过的数保持不变,所以后面的每个b数组只能变出k-1个不同的数,所以我们算出a中不同的数的个数之后再用刚刚的方法算出结果即可。 代码: #include<bits/stdc++.h> #define int long long #define IOS ios::sync_with_s

ACkingdom的博客 433

老版QQ原生表情gif动态

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

Grakn Forces 2020 E.Avoid Rainbow Cycles

思路: 考虑环上所有边不同色,即,每种颜色任意出一条边,构成的图都是无环的。 我们将每个集合的点连向一个集合源点,共m个集合源点,每个点都往包含该店的集合源点连边,那么这就是一个并查集的过程,可以很轻松的知道什么时候会产生环,那么在这之前将点都排好序,就可以贪心的删除最优点了。 #pragma GCC optimize(2) #pragma GCC optimize(3) #include <bits/stdc++.h> using namespace std; typedef long lon

pubgoso的博客 179

Grakn Forces I Bitwise Magic[思维][FWT]

刚才可能进行了个不完全统计,这题在网上的题解只有一篇 cf上的改过的中国人不少?看来大家都太鸽子了 没脑子的博主应该搬的是老K的做法/kk,看起来lk鸽鸽没写题解 题意:给你n个数,K<=ai<2CK<=a_i<2^CK<=ai​<2C进行K次操作,然后每次操作随机选定一个数-1,问最后n个数的异或和等于[0,2C)[0,2^C)[0,2C)中每个数的概率 n<=216,C,K<=16n<=2^{16},C,K<=16n<=216,C,K&l

ezoileaner的博客 293

acm-(NTT,方案计数,Kruskal重构树)Grakn Forces 2020 G. Clusterization Counting

传送门 关于Kruskal重构树的知识点在这里 题意翻译过来就是要求你将n个点的图划分成k个连通块,满足连通块内部的所有连边权值都小于从连通块连出的边的权值。 如果我们将所有边从小到大来建图会怎样呢?每次加入一条边有两种情况,一是u,v\mathbf{u,v}u,v已经同属一个连通块,故只是在这个连通块内增加一条边,二是将u,v\mathbf{u,v}u,v连通。 对于第一种情况而言,如果在某一次加边之后我们发现这个连通块内部的所有边数与点数的关系恰好符合完全图的点数和边数关系(即边数=点数∗(点数−1).

qq_30361651的博客 411

简单的数列

P2398 - 简单的数列 Description 一个简单的数列问题: 给定一个长度为n的数列,求这样的三个元素 ai,aj,ak 的个数,满足 ai<aj>ak,且 i<j<k 。 Input 第1行是一个整数n(1<=n<=50000...

weixin_30293135的博客 358

Codeforces Round #659 (Div. 2)A-D题解

Codeforces Round #659 (Div. 2)A-D题解 //打牛客多校去了,CD晚点施工 //写于rating值2032/2056 这一场cf是补的,题目分布并没有按照往常的难度梯度递增。 这场是同时有div1和div2,对于div2的人来说这场如果策略得到及时跟过题人数多的题去写C的话是个上分的好机会。 A题难度为一般div2场的B B1B2题难度为一般div2场的DE CD难度对应一般div2场的DE Codeforces Round #659 (Div. 2) A题难度系数1200 一

StandNotAlone的博客 1万+

Codeforces Round #702 (Div. 3)A-G题解

Codeforces Round #702 (Div. 3)A-G题解 比赛链接:https://codeforces.ml/contest/1490 这场F读错题意白给一发,G二分的if(dp[mid]<x)居然写成了if(dp[l]<x),做梦都没想到自己二分有写错的一天,疯狂白给5发。 Div3相对以前变简单了,罚时手速场。 A题 暴力 题意: 1000组数据 给定一个只包含正整数的长度为n的数组(n最大50),每个数字均在1到50之间。 你可以在任意位置插入任意的整数(这里其实有bug,

StandNotAlone的博客 3170

ZAFU_2021_2_17_2021寒假个人赛第四场题解

A题 原题链接:https://codeforces.com/problemset/problem/1296/A 相关tag:简单思维 我们每次操作可以把数组中的一个数变为另一个数,那么如果这两个数同为奇数或者同为偶数的话,操作后是不会对整个数组总和的奇偶性造成影响的。只有奇数变为偶数或者偶数变为奇数的时候,才会对整个数组总和的奇偶性造成影响。 那么我们可以统计出原数组中奇数的个数记为num1,偶数的个数记为num2。 整个数组总和的奇偶性是由奇数的个数决定的,当num1为奇数的时候,整个数组的总和一开始就

StandNotAlone的博客 2781

Codeforces Round #660 (Div. 2)A-D题解

Codeforces Round #660 (Div. 2)A-D题解 //写于rating值2184/2184 //上黄场,rating值+152。这一场没有什么算法,靠着一波快手速抢了一波不计div1选手的div2的第25名,记div1选手的第109名。很侥幸,但是上了黄名还是非常开心的。 比赛链接:https://codeforces.ml/contest/1388 A题 简单的构造。应该有很多的过题方法,这里我用的特判的方法,在稿纸上列了一波,6分钟过的题。 给定一个数字n,我们需要构造四个正整数a

StandNotAlone的博客 2231

Codeforces Round #707 (Div. 2, based on Moscow Open Olympiad in Informatics)A-D题解

Codeforces Round #707 (Div. 2, based on Moscow Open Olympiad in Informatics)A-D题解 比赛链接:https://codeforces.com/contest/1501/problem/A A题 相关tag:阅读理解,模拟 题意比较绕,多逼着自己只查单词不整篇翻译,读题能力就上来了。 题意: 从时间0开始出发,要依次经过在一条直线上的n个站点,问到达站点n的时间。 每个站点i都有对应的时间a[i],b[i],t[i] 从站点i-1到

StandNotAlone的博客 2149

Codeforces Round #666 (Div. 2)A-E题解(DE已施工完毕)

Codeforces Round #666 (Div. 2)A-E题解 //写于rating值2033/2184 //本场打的div1,本场出了AB题,rating值-42 //尽管存在读错题意白给4发的原因,但是如果没办法稳定出div2的E也就是div1的C的话,是没办法稳定在黄名或者打到更高的rating值的,毕竟也不是每次都是状态极佳可以A-D无失误手速极快。 //E题是看div1榜单排名从上往下第二位中国选手的代码理解的,昨晚的时候思路已经非常接近这个解法了,但是缺了一个关键性的结论和操作实现方法,

StandNotAlone的博客 2148

Divide by Zero 2021 and Codeforces Round #714 (Div. 2)A-E题解

Divide by Zero 2021 and Codeforces Round #714 (Div. 2)A-E题解 比赛链接:https://codeforces.com/contest/1513 A题 相关tag:构造 题意: 给定1-n(n<100)共n个整数,让你构造出一个排列方式,使得恰好有k个位置满足其左侧和右侧最近的那个数都比它的值小。 思路: 方便说明起见,将题目所说的位置称作“峰顶” 首先如果有两个下标i和j满足题目的条件,即a[i]>a[i-1]且a[i]>a[i+1

StandNotAlone的博客 2124

Codeforces Round #696 (Div. 2)A-D题解

Codeforces Round #696 (Div. 2)A-D题解 比赛链接:https://codeforces.com/contest/1474 A题 贪心 中文题意: 总共t组数据(最大1e3) 每组数据给一个长度为n(最大1e5,且所有数据的n累加不超过1e5)的只包含0和1的字符串a。 你需要构造一个同样长度为n且只包含0和1的字符串b,字符串a和b每一位上加起来得到一个长度为n的字符串c。 之后字符串c中所有连续的相同字符都用1个该自己替换,得到最后的字符串d。 你需要输出一个字符串b,满足

StandNotAlone的博客 1819
上一篇: zafu算法课作业1——递归题解
下一篇: Codeforces Round #675 (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、付费专栏及课程。

余额充值