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

Cursor3.0新界面使用说明 本文摘要:Cursor 3.x版本更新后,提供了两套主界面:Editor(类似VSCode的代码编辑器)和AgentsWindow(以AI智能体为中心的新界面)。Editor适合日常编码,AgentsWindow则支持并行运行多个AI任务、云端协作和多仓库管理。通过Ctrl+E可快速切换布局。文章详细介绍了AI聊天面板的操作技巧、四种工作模式(Agent/Plan/Ask/Debug)的区别,以及AgentsWindow的多任务管理功能。同时提供了Windows快捷键速查、中文化设置方法,并对比了新旧版本的 阅读详情

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到站点i的路上需要花费时间a[i]-b[i-1]+t[i]
到达站点i后,从站点i出发到下个站点需要满足两个条件:
1.在站点i至少需要等待(b[i]-a[i])/2(向上取整)的时间
2.出发的时间不能在b[i]时间前

#include<bits/stdc++.h>
#define ll long long
#define INF 0x7f7f7f7f //2139062143
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
const int maxn=1e2+7;
const double eps=1e-6;
const int mod=1e9+7;

int a[maxn],b[maxn],T[maxn];
int n;

int main(){
    IOS
    int t;cin>>t;
    while(t--){
        cin>>n;
        for(int i=1;i<=n;i++) cin>>a[i]>>b[i];
        for(int i=1;i<=n;i++) cin>>T[i];
        int now=0;//now代表当前时间
        for(int i=1;i<n;i++){//这里走到站点n-1即可
            now+=a[i]-b[i-1]+T[i];//从站点i-1到站点i需要划分的时间
            int temp=(b[i]-a[i]+1)/2;//在站点i至少需要等待的时间
            now+=temp;
            if(now<b[i]) now=b[i];//从站点i离开必须到时间b[i]之后
        }
        now+=a[n]-b[n-1]+T[n];//到达站点n就可以立即结束,不需要再多加时间
        cout<<now<<endl;
    }
}

B题
相关tag:逆向思维,模拟

题意:
一层一层依次堆叠n层蛋糕,堆叠第i层蛋糕时,会把从顶部往下的a[i]层蛋糕染色。
问最后的染色情况。

思路:
反过来思考,从顶向下看,用now记录当前向下会有多少层被染色,这样就避免了暴力对同一层重复染色的问题。
当然也可以差分来写。

#include<bits/stdc++.h>
#define ll long long
#define INF 0x7f7f7f7f //2139062143
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
const int maxn=2e5+7;
const double eps=1e-6;
const int mod=1e9+7;

int a[maxn];
bool flag[maxn];//flag标记是否被染色

int main(){
    IOS
    int t;cin>>t;
    while(t--){
        int n;cin>>n;
        for(int i=0;i<n;i++) cin>>a[i];

        int now=0;//now记录从当前位置向下有多少层会被染色
        for(int i=n-1;i>=0;i--){
            now=max(now,a[i]);//更新更大的now值
            if(now) {flag[i]=1;now--;}//如果now不为0,将当前层染色
        }

        for(int i=0;i<n;i++){
            cout<<flag[i]<<' ';
            flag[i]=0;
        }
        cout<<endl;
    }
}

C题
相关tag:暴力,数据范围分析

题意:
有n个数,问能否从中挑选出四个数字,使得其中两个相加等于另两个相加。

思路:
注意到这道题的数字范围最大为2.5e6,那么相加得到的最大值就是5e6。
那么我们暴力枚举所有下标对,记录下相加等于i的下标对有哪些。
对于每个和x,我们平均至多枚举3-4个下标对就必然能够得到答案,找到答案后立刻break,因此复杂度会在1e7的级别完全足够。
暴力实现即可。

#include<bits/stdc++.h>
#define ll long long
#define INF 0x7f7f7f7f //2139062143
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
const int maxn=2e5+7;
const double eps=1e-6;
const int mod=1e9+7;

int a[maxn];
bool cas[5000007];
vector<pair<int,int>>ans[5000007];//ans[i]记录和为i的下标对有哪些

int main(){
    IOS
    int n;cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int i=2;i<=n;i++){
        for(int j=1;j<i;j++){//暴力枚举
            int sum=a[i]+a[j];
            for(int k=0;k<ans[sum].size();k++){//暴力检测之前已经得到的相加等于sum的下标对
                if(ans[sum][k].first!=i&&ans[sum][k].second!=i&&ans[sum][k].first!=j&&ans[sum][k].second!=j){
                    //如果满足四个下标均不相同代表找到了答案
                    cout<<"YES"<<endl;
                    cout<<ans[sum][k].first<<' '<<ans[sum][k].second<<' '<<j<<' '<<i<<endl;
                    return 0;
                }
            }
            ans[sum].push_back({j,i});
        }
    }
    cout<<"NO"<<endl;
}

D题
扩展欧几里得,二分

题意:
给定一个长度为n的数组a和一个长度m的数组b,已经一个值k。
对这两个数组不断循环扩展,问这两个数组第k个数值不相同的下标位置。

思路:
这里首先需要推出一个小结论,
对于长度n和m来说,他们的最大公约数为g,那么n和m可以看成若干段长度为g的部分连接而成。
长度为g的部分是这两个数组的最小单位。

如果a[i](1<=i<=n)与b[j](1<=j<=m)在循环扩展后的同一个下标出现的话,i和j需要满足i%g==j%g。
注意到题目说了每个数组中的数字都是两两不同的,且数值在1e6之内。
那么我们可以用flag[x]记录数值x在数组a中出现的位置下标,在for一遍b数组,检测b中的每个数字在a中出现的下标位置,是否满足上述要求,如果满足的话,在一个lcm(最小公倍数)长度的循环中,会出现一次下标相同的情况,就是1次数值相同的情况。
由此我们可以计算出,一次lcm长度,会有多少对下标的数值是相同的,也就可以求出多少对下标的数值是不同的,记作L。

但是k不一定能被L整除,会有多余的部分需要继续在一轮lcm里找到具体的位置。
如果我们可以求出上一段叙述中,那些下标相同的具体位置在哪里,记录后利用二分就可以在log(n)的时间得到具体位置。
注意到如果a[i]与b[j]存在一个下标相同的位置,那么我们实际上是可以写出x×\times×n+i=y×\times×m+j的式子。
移项后得到x×\times×n+(-y)×\times×m=j-i,且j-i必定是g的整数倍。
那么系数x和y我们可以通过扩展欧几里得来求得。

基本思路完毕。

#include<bits/stdc++.h>
#define ll long long
#define INF 0x7f7f7f7f //2139062143
#define llINF 9223372036854775807
#define IOS ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
const int maxn=5e5+7;
const double eps=1e-6;
const int mod=1e9+7;

ll exgcd(ll a,ll b,ll &x,ll &y){
    if(!a&&!b) return -1;
    if(!b)
    {
        x=1;y=0;
        return a;
    }
    ll ret=exgcd(b,a%b,y,x);
    y-=a/b*x;
    return ret;
}

ll n,m,k;
ll numa[maxn],numb[maxn];
ll flag[maxn*2];
ll lm;//n和m的最小公倍数
vector<ll>cas;//记录一次lcm的长度内,有哪些下标是字母相同的

ll check(ll x){//单次lcm长度内,第x不匹配数字出现的情况
    if(x==0){//特殊处理恰好整数组lcm长度的情况
        ll ret=lm;
        for(int i=0;i<cas.size();i++){
            if(cas[cas.size()-i-1]==lm-i){
                ret--;
            }
            else break;
        }
        return ret-lm;
    }
    ll l=0,r=(ll)cas.size()-1;//二分查找最后一个匹配的位置,借由此计算出最后多余的长度是多少
    while(l<r){
        int mid=((l+r)>>1)+1;
        if(cas[mid]-mid>=x) r=mid-1;
        else l=mid;
    }
    return x+l;
}

int main(){
    scanf("%lld%lld%lld",&n,&m,&k);
    ll x,y;
    ll g=exgcd(n,m,x,y);//n和m的最大公约数,并计算出x*n+y*m=g的一组特解x,y
    lm=n/g*m;
    for(int i=1;i<=n;i++){
        scanf("%lld",&numa[i]);
        flag[numa[i]]=i;
    }
    for(int i=1;i<=m;i++){
        scanf("%lld",&numb[i]);
        if(flag[numb[i]]&&flag[numb[i]]%g==i%g){//需要满足字母相同,且对最大公约数取模后的值相等,才可能存在满足x*n+y*m=距离的解
            if(flag[numb[i]]==i) cas.push_back(i);
            else{
                //ll tempx=x*(i-flag[numb[i]])/g;
                ll tempy=y*((i-flag[numb[i]])/g)%lm;//求出当前情况对应的特解
                ll tar=-tempy*m+i;//计算下标位置,下标应该在1-lcm之内,因此下面对其值进行处理
                if(tar<0){
                    tar+=((-tar)/lm+1)*lm;
                }
                tar%=lm;
                if(tar==0) tar=lm;
                cas.push_back(tar);
            }
        }
    }
    cas.push_back(0);
    sort(cas.begin(),cas.end());
    ll ans=k/(lm-(ll)cas.size()+1)*lm;//取多少整数组长度的lcm
    k-=k/(lm-(ll)cas.size()+1)*(lm-(ll)cas.size()+1);//剩余还需要几次不相同
    printf("%lld\n",ans+check(k));
}
【Python机器学习】零基础掌握RFECV特征选择 通过应用算法,有效地识别了影响购买意愿的关键特征(浏览时长和点击数)和历史货币流通的主要因素(年代、人口和货币流通量)。这样的特征选择不仅提高了模型的解释能力,还可能用于电商推荐系统和历史研究的优化。优点总结,这种方法可以高效地找出对目标变量有最大影响的特征,进而可以用于各种实际应用场景,如电商推荐和历史研究。优点名称对应描述说明高解释性易于理解哪些特征最为重要泛化性能强通过交叉验证提高模型的稳健性应用场景多样可用于电商、金融、历史研究等多个领域。 阅读详情

相关推荐

如何在windows下使用cmake编译源码

MyProject/└── build/在MyProject目录下创建并编辑。创建build目录并进入。使用cmake命令生成构建文件。使用适当的命令编译项目。运行生成的可执行文件。

cdj444asdg的博客 3345

Codeforces Round #707 (Div. 2) C. Going Home (暴力枚举)

题目链接:https://codeforces.com/contest/1501/problem/C 题目大意:个数,,从中找出四个不同的数,要求,输出满足条件的任意的一组 题解:暴力枚举! 我们可以证明若存在四对数,那么其中一定可以找出四个不同的数,满足上述条件。 分类讨论: 若为的情况,那么显然,我们可以选择作为答案。 若为的情况,那么显然我们可以选择作为答案。 其余情况,也一定可以从4对数中,选出两组数满足条件。 我们可以用图来证明,我们假设下标为点,若两个下标的数相加为,我们可以在两

madaidao的专栏 349

如何根据芯片手册时序图编写驱动程序

如何根据芯片手册时序图编写驱动程序 对于电子开发者来说,刚刚拿到一个芯片,常用的芯片可以参考网上的例程来做深入了解,对于一个不常用的芯片来说,Datasheet几乎是使用芯片的唯一的资料,所以根据Datasheet时序图写出对应的驱动程序就尤为重要。 本文根据一个简单的例子来阐述根据时序图来编写对应的程序过程。旨在讲解对于初学者应该怎么利用芯片的时序图编写符合要求的底层驱动程序(老鸟请跳过)。 下载芯片的Datasheet,(个人常用http://www.21icsearch.com/)如..

weixin_36447711的博客 1万+

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

传送门 A. Alexey and Train Alexey is travelling on a train. Unfortunately, due to the bad weather, the train moves slower that it should! Alexey took the train at the railroad terminal. Let’s say that the train starts from the terminal at the moment 0. Also,

lcl1234567890lcl的博客 1686

Codesys 3.5报警功能配置保姆级教程:从变量定义到确认方式(含REF/ACK详解)

本文详细介绍了Codesys 3.5报警功能的配置流程,从变量定义到确认方式的选择,特别解析了REF和ACK两种确认方式的底层逻辑。通过实战案例和代码示例,帮助工程师快速掌握报警系统的搭建与调试技巧,提升工业自动化项目的可靠性。

weixin_29245767的博客 458

【在英伟达nvidia的jetson-orin-nx上使用调试can基础收发-硬件连接-开机自启动can-初步调试】

近期开始学习英伟达的工控板,作为新手还是有很多不同懂得地方,但是一部分它用的linux系统,有点像玩树莓派,通过自己一段时间学习can调试,终于可以简单通信了。开始的时候,自己也是什么都不是很懂,从新手一点点摸索过来,现在使用工控机,简单can通信也已经没有问题了,算是有些进步吧。每一步走的都很艰辛,需要反复验证,才能准去无误,开始以为发送没有问题就没事了,没想到发送可以却接受不行,每一步都要反复确认啊,这个问题会持续关注下吧。

qq_22146161的博客 6120

Codeforces Round #707 (Div. 2) A. Alexey and Train

原题链接 题目大意: 给你一个火车的时间表(包括预计到达时间ai,预计出发时间bi),再给你一个组数,表示每站到达的延迟时间。火车出发需要满足两个条件。 1.最少等待(预计出发时间-预计到达时间)/2的时间(向上取整)。 2.出发时间>=预计出发时间 输入格式 第一行包含一个整数t(1≤t≤100)-测试用例的数量。 每个测试用例的第一行包含单个整数n(1≤n≤100)-站的数量。 接下来的n行每行包含两个整数:ai和bi(1≤ai<bi≤106)。可以保证bi<ai+1。 下一行包

遗落之辉的博客 299

排查单片机不工作的‘玄学’故障:从LDO选型、复位电路到焊接不良的完整避坑指南

本文深入剖析单片机不工作的常见硬件故障,从LDO选型、复位电路设计到PCB布局和焊接工艺,提供系统性排查方法。重点分析3.3V电源稳定性、LDO动态响应特性及复位电路设计要点,帮助工程师快速定位和解决嵌入式系统中的'玄学'故障,提升产品可靠性。

weixin_30655569的博客 387

Codeforces Round #706 (Div. 2)

1496A - Split it! 题意 给定 SSS 和 kkk,要求把 SSS 拆分为 a1+a2+⋯+ak+ak+1+R(ak)+R(ak−1)+⋯+R(ai) a_1 + a_2 + \cdots + a_k + a_{k + 1} + R(a_k) + R(a_{k - 1}) + \cdots + R(a_i) a1​+a2​+⋯+ak​+ak+1​+R(ak​)+R(ak−1​)+⋯+R(ai​) 的形式,其中 R(a)R(a)R(a) 表示 AAA 的反串,例如 R(abcd)=dcbaR(

YangTY的博客 767

手把手排查IOMMU映射故障:从内核日志到硬件寄存器调试全指南

本文详细解析了IOMMU映射故障的排查方法,从内核日志分析到硬件寄存器调试,提供了一套完整的诊断流程。涵盖AMD和Intel平台的特定调试技巧,包括ATS协商失败、DMA传输错误等常见问题的解决方案,并介绍了高级调试工具链的搭建与性能优化策略。

weixin_42666036的博客 354

Claude Code 错误解决方案 API Error: 前缀通用错误

本文分析了Claude Code与Anthropic API通信时出现的通用错误处理问题。当API返回未分类错误时,系统会直接显示"API Error: "前缀的原始错误信息。通过错误链路追踪发现,这是由于未匹配特定错误类型时触发了通用兜底处理逻辑。文章提供了三种解决方案:查看具体错误内容、启用调试日志以及提交问题反馈,并建议用户关注错误码、使用/compact命令处理上下文超限问题。最后强调这些未分类错误是预期行为,用户应通过错误消息中的线索自行排查或反馈开发者。

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 1346

Codeforces Round #707 (Div. 2, based on Moscow Open Olympiad in Informatics)/D

Codeforces Round #707 (Div. 2, based on Moscow Open Olympiad in Informatics)/D D.Two chandeliers 题意:给出两个无限循环序列A,B以及整数k,找出最小长度x满足对于1≤i≤x1\le i\le x1≤i≤x,恰好有k对ai≠bia_i\ne b_iai​​=bi​。 A序列的循环节长度为n,B序列为m。 对于序列A,B,找出循环节中所有的ai≠bia_i\ne b_iai​​=bi​的时间复杂度是O(nm)O

WedsonLin的博客 393

Python爬虫:爬取健身平台运动数据(跑步、骑行轨迹)

通过分析这些运动数据,用户能够了解自己的运动趋势、运动成绩,并作出相应的调整。通过使用Strava的API,我们成功地获取了用户的运动活动信息和运动轨迹数据,并进行了存储与可视化。Strava的API提供了丰富的数据接口,能够通过OAuth2认证获取用户的运动数据,包括历史数据、运动轨迹等信息。Strava的API还提供了获取活动轨迹数据的接口,返回的数据格式通常是GeoJSON格式,适用于地图可视化。随着大数据技术的发展,运动数据的分析和可视化为个人健康管理、运动训练计划的优化等提供了强大的支持。

2201_76125261的博客 1074

Codeforces Round #626 (Div. 2, based on Moscow Open Olympiad in Informatics) B.Count Subrectangles

Codeforces Round #626 (Div. 2, based on Moscow Open Olympiad in Informatics) B.Count Subrectangles You are given an array a of length n and array b of length m both consisting of only integers 0 and 1...

旺崽的博客 2739

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Codeforces Round #626 (Div. 2, based on Moscow Open Olympiad in Informatics) D.Present

Codeforces Round #626 (Div. 2, based on Moscow Open Olympiad in Informatics) D.Present Catherine received an array of integers as a gift for March 8. Eventually she grew bored with it, and she started...

旺崽的博客 2739

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Codeforces Round #775 (Div. 2, based on Moscow Open Olympiad in Informatics)简训

Codeforces Round #775 (Div. 2, based on Moscow Open Olympiad in Informatics)日常训练,E题之后有时间看,先贴两篇题解

C_eeking的博客 671

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Codeforces Round #626 (Div. 2, based on Moscow Open Olympiad in Informatics)

Codeforces Round #626 (Div. 2, based on Moscow Open Olympiad in Informatics) 题目 难度 思路 A 简单 贪心 B 一般 思维+数学 C 简单 贪心 D 较难 数学+二进制+二分 A. Even Subset Sum Problem 题意: 找出一个子序列使得子序列的和为偶数...

weixin_45676038的博客 156

Codeforces Round #626 (Div. 2, based on Moscow Open Olympiad in Informatics) C.Unusual Competitions

Codeforces Round #626 (Div. 2, based on Moscow Open Olympiad in Informatics) C.Unusual Competitions A bracketed sequence is called correct (regular) if by inserting “+” and “1” you can get a well-form...

旺崽的博客 2506

Codeforces Round #775 (Div. 2, based on Moscow Open Olympiad in Informatics)

Dashboard - Codeforces Round #775 (Div. 2, based on Moscow Open Olympiad in Informatics) - CodeforcesCodeforces. Programming competitions and contests, programming communityhttps://codeforces.com/contest/1649先放个连接,之前都是打虚拟赛,第一次打实时赛只做出来两题,好菜啊自己 A. Game 因为只

m0_57221330的博客 513

Codeforces Round #626 (Div. 2, based on Moscow Open Olympiad in Informatics) 题解

A. Even Subset Sum Problem 题目 题意: 给定一个由nnn个正整数组成的数组aaa。找到其元素的非空子集,使其和为偶数(即,可被222整除)或确定不存在这样的子集。 思路: 总共由三种情况: 只要出现一个偶数,那么一定有一个子序列就是它自己。 出现至少两个奇数,那么和一定为偶数。 如果只有一个奇数的情况下,那么此时这个序列才不为偶数。 #include <iostream> #include <cstring> #include <cstdio

忘梦心的博客 708

Codeforces Round #707 (Div. 2, based on Moscow Open Olympiad in Informatics)

比赛链接:Codeforces Round #707 (Div. 2, based on Moscow Open Olympiad in Informatics) A:Alexey and Train 题意:从 0 站台出发到达第 nnn 号站台的时间, aia_iai​ 表示火车到达第 iii 站的时间,bib_ibi​ 表示火车离开第 iii 个站台的时间。tit_iti​ 表示第 i−1i-1i−1 号站台到达 iii 号站台的时间。 题解:第 i−1i-1i−1 号站台到 iii 号站台时间 res

285

Codeforces Round #707 (Div. 2, based on Moscow Open Olympiad in Informatics)——ABC解题报告

Codeforces Round #707 (Div. 2, based on Moscow Open Olympiad in Informatics) 比赛链接:https://codeforces.com/contest/1501 A. Alexey and Train 题解 题意给的有点模糊,不过大致猜出题意后模拟即可。 代码 #include <bits/stdc++.h> #define PI atan(1.0)*4 #define rp(i,s,t) for (register i

mumei的博客 246

Codeforces Round #707 (Div. 2, based on Moscow Open Olympiad in Informatics) C

Codeforces Round #707 (Div. 2, based on Moscow Open Olympiad in Informatics) C 大意 给定一个数组 \(a\) ,保证 \(n \leq 200000\) , \(1 \leq a_i \leq 2.5*10^6\) 问: 是否存在四个各不相同的数 \(x,y,z,w\) ,满足 \(a_x+a_y = a_z + a...

Flowers 184
上一篇: ZAFU_2021_2_17_2021寒假个人赛第四场题解
下一篇: Divide by Zero 2021 and Codeforces Round #714 (Div. 2)A-E题解
StandNotAlone
博客等级 码龄7年 338粉丝 47原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值