Codeforces Round 893 (Div. 2)

news2025/1/15 23:47:11

A.首先题目意思就是看谁拥有的按钮多,所以优先按c的按钮,按两次c等于没按,所以最后看c的奇偶,奇数代表第一个人能多拥有一个,最后判断第一个人和第二个人拥有的总数即可

#include<bits/stdc++.h>
using namespace std;
const int N = 2e6+10,mod=1e9+7;
#define int long long
typedef long long LL;
typedef pair<int, int> PII;
int n,m,k;

void solve(){
    int a,b,c;cin>>a>>b>>c;
    a+=c%2;
    if(a>b) cout<<"First\n";
    else cout<<"Second\n";
}

signed main(){
    cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);
    int t=1;
    cin>>t;
    while(t--) solve();
}

B.枚举删除的是那个商店

因为a[i]点一定会吃蛋糕,所以我们只需要计算a[i]-1-a[i-1]的距离需要吃多少蛋糕即可

因为我们插入一个1和n+1

#include<bits/stdc++.h>
using namespace std;
const int N = 2e6+10,mod=1e9+7;
#define int long long
typedef long long LL;
typedef pair<int, int> PII;
int n,m,k,d;
int a[N];
void solve(){
	cin>>n>>m>>d;	
	for(int i=1;i<=m;i++) cin>>a[i];
	a[0]=1;a[m+1]=n+1;
	int s=1;
	for(int i=1;i<=m+1;i++)
	{
	    s+=(a[i]-a[i-1]-1)/d;
	    if(i!=m+1&&a[i]!=1)  
	    s++;
	}
   
	int res=2e18,cnt=0;
	for(int i=1;i<=m;i++)
	{
	    int sum=s;
	    sum-=(a[i]-a[i-1]-1)/d+(a[i+1]-a[i]-1)/d;
	    sum+=(a[i+1]-a[i-1]-1)/d;

	    if(a[i]!=1) sum--;
	    if(res>sum) res=sum,cnt=1;
	    else if(res==sum) cnt++;
	}
	cout<<res<<" "<<cnt<<"\n";
}

signed main(){
    cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);
    int t=1;
    cin>>t;
    while(t--) solve();
}

C.

首先构造题无脑打表

额其实好像看不出来啥,但是有个提示

比如排列 1 2 3 6 4 8 57可以换成

1 2 4 8 3 6 5 7

可以观察到 2>4>8>16>32=gcd(2,4,8,16,gcd(32,2))且不会得到重复的gcd

所以大概思路就是每次以某个质因子为起点*2,直到>n

#include<bits/stdc++.h>
using namespace std;
const int N = 2e6+10,mod=1e9+7;

typedef long long LL;
typedef pair<int, int> PII;
int n,m,k,d;
void solve(){
	cin>>n;
	vector<int> st(n+10,false);
	st[1]=1;
    for(int i=1;i<=n;i++){
        if(i==1) cout<<1<<" ";
        else{
            if(st[i]) continue;
            int x=i;
            while(x<=n){
                cout<<x<<" ";
                st[x]=true;
                x*=2;
            }
        }
    }
    cout<<"\n";
}

signed main(){
    cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);
    int t=1;
    cin>>t;
    while(t--) solve();
}

D.首先最长的连续0和连续1肯定不会相交

所有要么0在前,1在后,要么0后1前

所以大概思路就是预处理出

前i颗树,用了j次,0和1的最长前缀连续长度

和后i棵树用了j次,0和1的最长后缀连续长度

然后直接枚举l0为0到n的个数,此时答案就是

max(a*l0前缀个数+l1后缀的个数,a*I0后缀个数+I1前缀个数)

解释一下方程

dp1:前i个树,用了j次,且以i结尾的最长连续长度 

如果s[i]==s[i-1] 

dp1[i][j]=max(dp1[i][j],dp1[i-1][j]+1)

else:dp1[i][j]=max(dp1[i][j],dp1[i-1][j-1]+1)(j-1>=0)

f:前i个树用了j次的最长前缀长度

以1到i结尾的最长连续长度(dp1[1][j]到dp1[i][j])的最大值

g:后i个树用了j次的最长后缀长度

同上同理

t就是代表当前是I0的长度还是I1的长度

最后统计一下l0从1到n里面 I1最大值即可

#include<bits/stdc++.h>
using namespace std;
const int N = 2e6+10,mod=1e9+7;

typedef long long LL;
typedef pair<int, int> PII;
int n,m,k,d;
void solve(){
	cin>>n>>k;
	string s;cin>>s;
    
	vector<vector<array<int,2>>> f(n+1,vector<array<int,2>>(k+1));
	vector<vector<array<int,2>>> g(n+1,vector<array<int,2>>(k+1));

      auto get = [&](vector<vector<array<int, 2> > > &dp)
        {
            vector<vector<array<int,2>>> dp1(n+1,vector<array<int,2>>(k+1));
            for(int i = 0; i <n; i++){
                for(int j = 0; j <= k; j++){
                    for(int t = 0; t < 2; t++)
                    {
                        dp[i+1][j][t]=max(dp[i+1][j][t],dp[i][j][t]);
                        if(s[i]-'0'==t)
                        {
         dp1[i + 1][j ][t] = max(dp1[i + 1][j ][t], dp1[i][j][t] + 1);
        dp[i+1][j][t]=max(dp[i+1][j][t],dp1[i+1][j][t]);
                        }
                        else
                        {
                            if(j+1<=k)
                            {
            dp1[i + 1][j + 1][t] = max(dp1[i + 1][j + 1][t], dp1[i][j][t] + 1);
        dp[i+1][j+1][t]=max(dp[i+1][j+1][t],dp1[i+1][j+1][t]);
                            }
                        }
                        
                    }
                }
            }
        };
    get(f);
    reverse(s.begin(),s.end());
    get(g);
    
    vector<int> suf(n+10,-2e9);
    vector<bool> st(n+10,false);
    for(int i=1;i<=n;i++){
        for(int j=0;j<=k;j++){
            for(int t=0;t<2;t++)
            {
                int mx1=f[i][j][t];
                int mx2=g[n-i][k-j][t^1];
                if(t) swap(mx1,mx2);
                st[mx1]=true;
                suf[mx1]=max(suf[mx1],mx2);
            }
        }
    }
    for(int i=n;i>=0;i--)
    suf[i]=max(suf[i+1],suf[i]);
    
    vector<int> res(n+1,0);
    for(int i=0;i<=n;i++)
    {
        if(!st[i]) continue;
        for(int j=1;j<=n;j++)
        {
            res[j]=max(res[j],j*i+suf[i]);
        }
    }
    for(int i=1;i<=n;i++)
    cout<<res[i]<<" \n"[i==n];
}

signed main(){
    cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);
    int t=1;
    cin>>t;
    while(t--) solve();
}

E.给定一个序列

添加一个数相当于上个点和当前点链接一条边,添加一个点

-k就是往上跳k步(可以用倍增处理)

回滚(跳到上一次的点,记录一下上一次到达的点即可)

?(从根节点到当前节点的不同数的个数)

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+10,mod=1e9+7;

typedef long long LL;
typedef pair<int, int> PII;
int n,m,k,d;
vector<int> g[N],query[N];
int fa[20][N];
int ans[N],a[N],cnt[N],sum;
void dfs(int u){
    if (u != 1)
    {
        if (++cnt[a[u]] == 1)
        {
            sum += 1;
        }
    }
    for(auto x : query[u]) ans[x] = sum;
    for(auto j : g[u]) dfs(j);
    if (u != 1){
        if (--cnt[a[u]] == 0){
            sum -= 1;
        }
    }
}
void solve(){
    cin >> n;
    int tot = 1, cur = 1, qs = 0;
    vector<int> ops;
    ops.reserve(n);
    ops.push_back(cur);
    for(int i = 0; i < n; i++){
        char op;
        cin >> op;
        if (op == '+'){
            int x;
            cin >> x;
            a[++tot] = x;
            fa[0][tot] = cur;
            for(int j = 1; j <= 19; j++)
                fa[j][tot] = fa[j - 1][fa[j - 1][tot]];
            g[cur].push_back(tot);
            cur = tot;
            ops.push_back(cur);
        }
        else if (op == '-')
        {
            int k;
            cin >> k;
            for(int j = 19; j >= 0; j--){
                if (k >> j & 1){
                    cur = fa[j][cur];
                }
            }
            ops.push_back(cur);
        }
        else if (op == '!')
        {
            ops.pop_back();
            cur = ops.back();
        }
        else{
            query[cur].push_back(++qs);
        }
    }
    dfs(1);
    for(int i = 1; i <= qs; i++)
        cout << ans[i] << '\n';
}

signed main(){
    cin.tie(0);cout.tie(0);ios::sync_with_stdio(0);
    int t=1;
   // cin>>t;
    while(t--) solve();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/885361.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Ubuntu】简洁高效企业级日志平台后起之秀Graylog

简介 Graylog 是一个用于集中式日志管理的开源平台。在现代数据驱动的环境中&#xff0c;我们需要处理来自各种设备、应用程序和操作系统的大量数据。Graylog提供了一种方法来聚合、组织和理解所有这些数据。它的核心功能包括流式标记、实时搜索、仪表板可视化、告警触发、内容…

spring(1)

文章目录 IOC容器IOC容器和beans的介绍实例化 BeanBeanFactory&#xff1a;ApplicationContext 容器概述配置元数据实例化容器组合基于xml的配置元数据使用容器 bean的概述命名bean别名的使用 实例化bean构造函数实例化静态工厂实例化实例工厂方法bean 在运行时的实际类型 依赖…

Microsoft Learn AI 技能挑战赛|开启你的 Azure OpenAI Service 应用

点击蓝字 关注我们 Microsoft Learn AI 技能挑战赛已经结束&#xff0c;完赛的小伙伴请保存完赛截图并登记奖品领取表单&#xff01;此外&#xff0c;挑战赛作品提交将截止到8月18日&#xff0c;优秀作品将获得惊喜礼包奖励。 奖品领取、作品提交等详情请查看&#xff1a; 活动…

Docker入门——实战图像分类

一、背景 思考&#xff1a; 在一个项目的部署阶段&#xff0c;往往需要部署到云服务器或者是终端设备上&#xff0c;而环境的搭建往往是最费时间和精力的&#xff0c;特别是需要保证运行环境一致性&#xff0c;有什么办法可以批量部署相同环境呢&#xff1f; Docker本质——…

揭秘热门工作秘籍:ChatGPT大显身手!轻松提升工作效率的高效Prompt技巧曝光!

目录 01 背景 福利&#xff1a;文末有chat-gpt纯分享&#xff0c;无魔法&#xff0c;无限制 02 AI 可以帮助程序员做什么&#xff1f; 2.1 技术知识总结 2.2 拆解任务 2.3 阅读代码/优化代码 2.4 代码生成 2.5 生成单测 2.6 更多 AI 应用/插件 AIPRM Voice Control for Ch…

改善神经网络——优化算法(mini-batch、动量梯度下降法、Adam优化算法)

改善神经网络——优化算法 梯度下降Mini-batch 梯度下降&#xff08;Mini-batch Gradient Descent&#xff09;指数加权平均包含动量的梯度下降RMSprop算法Adam算法 优化算法可以使神经网络运行的更快&#xff0c;机器学习的应用是一个高度依赖经验的过程&#xff0c;伴随着大量…

SUMO 充电站与电动车详解

官方文档参考&#xff1a;Electric 创建电动车 首先在rou.xml文件中定义一个电动车类型&#xff0c;例如&#xff1a; <vType id"EV" length"5.00" minGap"2.50" maxSpeed"70.00" color"white" accel"1.0" …

【边缘设备】yolov5训练与rknn模型导出并在RK3588部署~2.环境验证(亲测有效)

保姆级教程&#xff0c;看这一篇就够用了。 在翻阅了网络上很多资料后&#xff0c;发现很多版本的信息比匹配。 花了一周的时间配置环境&#xff0c;以及环境验证&#xff0c;然后写了这篇长文。 有过程&#xff0c;有代码&#xff0c;有经验&#xff0c;欢迎大家批评指正。 一…

Linux 操作文件的系统调用

一、系统调用 系统调用表现出来的形式和库函数看着是一样的&#xff0c;但是系统调用的实现是在内核中&#xff0c;一旦执行系统调用以后&#xff0c;会产生中断&#xff0c;陷入内核&#xff0c;内核去执行相应的代码。我们无法直接去执行内核的代码&#xff0c;系统调用执行…

烧烤炉跨境电商UL检测报告UL 2728A标准

烧烤炉是一种烧烤设备&#xff0c;可以用来做烤羊肉串、烤肉、烤蔬菜等烧烤食品。烧烤炉根据加热源的不同可以分为木炭烧烤炉、燃气烧烤炉和电热烧烤炉&#xff1b;根据烧烤形式的不同&#xff0c;可分为手动烧烤炉和自动烧烤炉&#xff1b;根据用途的不同&#xff0c;可分为家…

如何使用PE修改win10系统的开机密码

前言&#xff1a;忘记自已电脑密码的人真的是太可怜了&#xff0c;半年多的时间没在公司&#xff0c;公司电脑也有半年多没有碰过&#xff0c;导致再回公司上班电脑密码早就忘记了。平时各类电子设备&#xff0c;软件应用的密码都是设成一样的&#xff0c;公司电脑因为有保密机…

ACM模式专业集训

在笔试的时候&#xff0c;大部分都是ACM模式&#xff0c;这让我们习惯于leetcode刷题确实输入输出很难下手&#xff0c;有的时候&#xff0c;明明题可以做出来&#xff0c;但是就是因为输入输出比较欠缺&#xff0c;因此无缘笔试&#xff0c;所以我们在平常的时候应该多去用ACM…

Scratch 之 翻页器制作

众所周知&#xff0c;在原版scratch上有一块480360大小的屏幕。但是我们如果在scratch编译器上编一些文字比较多的文章时&#xff0c;就会发现&#xff1a;字太多舞台区大小不够用怎么办&#xff1f;别着急&#xff0c;看我怎么解决。 标题大家都看到了吧&#xff0c;这个作品解…

pe文件的Import table导入表的手工修复

一、实验目的&#xff1a; 实验提供了一个不能正常运行的程序&#xff0c;如果在正常运行的情况下&#xff0c;程序的功能是弹出一个messagebox&#xff0c;然后正常退出。要做的&#xff0c;是通过排查错误&#xff0c;找到问题所在&#xff0c;修改程序&#xff0c;使其正常运…

猿辅导发布素质教育品牌,助力孩子学习底层能力培养

近年来&#xff0c;我国教育改革逐步深化&#xff0c;发展素质教育已成社会共识。2022年教育部发布新课标&#xff0c;根据学生的核心素养要求&#xff0c;确定了各门课程具体目标&#xff0c;优化了课程内容结构。其中&#xff0c;跨学科学习、探究式学习成为了新的学习方式。…

bigemap如何添加在线高清卫星图?

一、先那安装bigemap 软件 BIGEMAP电脑全能版 下载连接&#xff1a;http://www.bigemap.com/reader/download/detail201802015.html 二、鼠标放在左上角选择地图源这里&#xff0c;点击第一个加号按钮 选择从配置文件添加在线地图 吧地图配置文件选择导入添加&#xff0c;勾选…

【取证】2022美亚杯资格赛个人赛

【取证】2022美亚杯资格赛个人赛 加载检材创建案件个人赛部分&#xff08;共70题&#xff09;1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.6…

攻防演习常用威胁情报中心

攻防演习常用威胁情报中心 微步在线&#xff1a;https://x.threatbook.com/绿盟威胁分析中心&#xff1a;https://poma.nsfocus.com/奇安信威胁情报中心&#xff1a;https://ti.qianxin.com/360安全大脑&#xff1a;https://sc.360.net/360沙箱云地址“”https://ata.360.net/天…

使用pysnmp报错lambda错误

pip install pyasn10.4.8 pysnmp4.4.12 python - Takes exactly 3 arguments (4 given) - Stack Overflow

CorelDRAW2023(简称CDR23)官方最新中文版下载教程

CorelDRAW&#xff08;简称CDR&#xff09;是一款专业的图形设计软件。该软件是加拿大Corel公司开发的一款功能强大的专业平面设计软件、矢量设计软件、矢量绘图软件。这款矢量图形制作工具软件广泛应用于商标设计、标志制作、封面设计、CIS设计、产品包装造型设计、模型绘制、…