Codeforces Round 964 (Div. 4) A~G

news2025/4/11 14:53:44

封面原图 画师ideolo

A - A+B Again?

题意

给你一个两位数,把他的个位和十位加起来

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;

void solve()
{
    int n;
    scanf("%d",&n);
    printf("%d\n",n/10+n%10);
}

int main()
{
    int T=1;
    scanf("%d",&T);
    while(T--)
    {
        solve();
    }
    return 0;
}

B - Card Game

题意

两个人每人两张牌,以任意顺序轮流翻开比大小,问a获胜的可能性种数

思路

一共就4种 枚举一下就行了

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
bool play(int a1,int b1,int a2,int b2)
{
    int A=0,B=0;
    if(a1>b1) A++;
    else if(a1<b1) B++;
    if(a2>b2) A++;
    else if(a2<b2) B++;
    if(A>B) return true;
    else return false;
}

void solve()
{
    int a1,a2,b1,b2;
    scanf("%d%d%d%d",&a1,&a2,&b1,&b2);
    int cnt=0;
    if(play(a1,b1,a2,b2)) cnt++;
    if(play(a1,b2,a2,b1)) cnt++;
    if(play(a2,b1,a1,b2)) cnt++;
    if(play(a2,b2,a1,b1)) cnt++;
    printf("%d\n",cnt);
}

int main()
{
    int T=1;
    scanf("%d",&T);
    while(T--)
    {
        solve();
    }
    return 0;
}

C - Showering

题意

一个人每天有很多段时间有不同的工作,问他能否挤出连续m分钟的空闲时间

思路

对所有工作时间排个序然后找中间的空有没有大于m的即可

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;

void solve()
{
    int n,s,m;
    scanf("%d%d%d",&n,&s,&m);
    vector<pii> task;
    for(int i=0;i<n;i++)
    {
        int l,r;
        scanf("%d%d",&l,&r);
        task.push_back({l,r});
    }
    task.push_back({0,0});
    task.push_back({m,m});
    sort(task.begin(),task.end());
    for(int i=0;i<=n;i++)
    {
        if(task[i+1].first-task[i].second>=s)
        {
            printf("YES\n");
            return ;
        }
    }
    printf("NO\n");
}

int main()
{
    int T=1;
    scanf("%d",&T);
    while(T--)
    {
        solve();
    }
    return 0;
}

D - Slavic’s Exam

题意

问s里面有没有子串t,其中的问号可以改成任意字母

思路

直接贪心,找到问号就直接变成t的下一个,因为就算后面有我提前变也不会让事情变得更糟糕的

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;

void solve()
{
    string s,t;
    cin>>s>>t;
    int n=s.size(),m=t.size();
    int i=0,j=0;
    for(;i<n and j<m;i++)
    {
        if(s[i]==t[j])
        {
            j++;
        }
        else if(s[i]=='?')
        {
            s[i]=t[j];
            j++;
        }
    }
    if(j<m)
    {
        cout<<"NO\n";
        return ;
    }
    for(i=0;i<n;i++)
    {
        if(s[i]=='?')
        {
            s[i]='a';
        }
    }
    printf("YES\n");
    cout<<s<<endl;
}

int main()
{
    int T=1;
    scanf("%d",&T);
    while(T--)
    {
        solve();
    }
    return 0;
}

E - Triple Operations

题意

每次给一个区间,问要做多少次操作才能把区间内所有数变成0,操作是每次选两个数,一个数乘三,一个数除三(向下取整)

思路

任何数乘3肯定都会变大,除了0,所以一开始我一定要创造一个0然后一直薅这一个羊毛就可以了,在他变成0的过程当中就会有一个数字乘了同样多的3,然后后续要把这个变回来,所以第一个数变成0需要的操作数其实是翻倍的,后面的都是只要知道除多少次3变成0就行
一个一个计算太慢了会TLE,我们发现数据范围不大,所以可以提前预处理每个数变成0需要的操作个数,每次给一个区间的话我们还可以对这个预处理的答案跑一遍前缀和,这样的话我们就可以用 O ( 1 ) O(1) O(1)解决每一次询问了

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
int pre[200010];
ll sum[200010];
void ini()
{
    memset(pre,0,sizeof(pre));
    for(int i=0;i<=200000;i++)
    {
        int t=i;
        while(t>0)
        {
            t/=3;
            pre[i]++;
        }
    }
    sum[0]=pre[0];
    for(int i=1;i<=200000;i++)
    {
        sum[i]=sum[i-1]+pre[i];
    }
}

void solve()
{
    int l,r;
    scanf("%d%d",&l,&r);
    ll ans=sum[r]-sum[l-1];
    ans+=pre[l];
    printf("%lld\n",ans);
}

int main()
{
    int T=1;
    scanf("%d",&T);
    ini();
    while(T--)
    {
        solve();
    }
    return 0;
}

F - Expected Median

题意

给一个0,1构成的数组,问所有长度为k的子串的中位数之和

思路

因为只由0,1构成,而且题目给了k一定是奇数,所以这个数组只要1多中位数就是1,反之也是一样,但0作为中位数没有任何意义,对答案没有贡献,那么有多少子串的1比较多呢?
我们可以使用组合数,假设一共是长度为k,那就在1里面选 ( k − 1 ) / 2 , ( k − 1 ) / 2 + 1 , . . . . . . , k (k-1)/2,(k-1)/2+1, ......,k (k1)/2,(k1)/2+1,......,k个,剩下的选0,这一个过程直接用组合数计算即可

组合数的计算

因为赛时就是这个我不会使得没能拿下ak所以单独拿出来讲一下 我之前用的一直是开二维数组然后用二项式定理预处理 所以赛时写的是这样 喜提WA3

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
const ll MOD=1e9+7;
ll Combine[2010][2010];
void ini()
{
    memset(Combine,0,sizeof(Combine));
    for(int i=0;i<=2000;i++)
    {
        Combine[i][0]=1;
        for(int j=1;j<=i;j++)
        {
            Combine[i][j]=Combine[i-1][j]+Combine[i-1][j-1];
        }
    }
}
ll C(int n,int m)
{
    if(m>n)
        return 0;
    if(n>=2000 or m>=2000)
    {
        return C(n-1,m-1)+C(n-1,m);
    }
    return Combine[n][m];
}

void solve()
{
    int n,k;
    scanf("%d%d",&n,&k);
    int zero=0,one=0;
    for(int i=0;i<n;i++)
    {
        int x;
        scanf("%d",&x);
        if(x==0)
            zero++;
        else
            one++;
    }
    ll hlf=k/2+1;
    ll ans=0;
    for(;hlf<=min(k,one);hlf++)
    {
        ans+=C(one,hlf)%MOD*C(zero,k-hlf)%MOD;
        ans%=MOD;
    }
    printf("%lld\n",ans);
}

int main()
{
    int T=1;
    scanf("%d",&T);
    ini();
    while(T--)
    {
        solve();
    }
    return 0;
}

至于更高级的算法,我三言两语讲不清楚,丢个acwing的链接吧
在这里插入图片描述

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;
const ll MOD=1e9+7;
const int N=2e6+10;
ll fact[N],infact[N];

ll qpow(ll a,ll b)
{
    ll res=1;
    while(b)
    {
        if(b&1)
            res=res*a%MOD;
        a=a*a%MOD;
        b>>=1;
    }
    return res;
}

void ini()
{
    fact[0]=infact[0]=1;
    for(int i=1;i<N;i++)
    {
        fact[i]=fact[i-1]*i%MOD;
        infact[i]=qpow(fact[i],MOD-2);
    }
}

ll C(ll a,ll b)
{
    if(a<b)
        return 0;
    return fact[a]*infact[b]%MOD*infact[a-b]%MOD;
}

void solve()
{
    int n,k;
    scanf("%d%d",&n,&k);
    int zero=0,one=0;
    for(int i=0;i<n;i++)
    {
        int x;
        scanf("%d",&x);
        if(x==0)
            zero++;
        else
            one++;
    }
    ll hlf=k/2+1;
    ll ans=0;
    for(;hlf<=min(k,one);hlf++)
    {
        ans+=C(one,hlf)%MOD*C(zero,k-hlf)%MOD;
        ans%=MOD;
    }
    printf("%lld\n",ans);
}

int main()
{
    int T=1;
    scanf("%d",&T);
    ini();
    while(T--)
    {
        solve();
    }
    return 0;
}

G - Ruler

题意

隐藏一个数,输入比他小的数不变,但是大于等于它的数的返回值都会加1,现在每次可以问两个数,告诉你他们返回值的乘积,需要在7次询问之内找到隐藏的这个数

思路

问的次数这么少肯定是二分,但是发现这题二分还不够,但是我们每次其实相当于可以问两个数字,所以我们可以直接三分区间,注意写的时候边界处理好就可以了,不要向我一样还wa了一发

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int,int> pii;
typedef pair<ll,ll> pll;

void solve()
{
    int l=0,r=1000;
    while(l<r)
    {
        int mid=(r-l)/3;
        int quart1=l+mid,quart2=r-mid;
        cout<<"? "<<quart1<<" "<<quart2<<"\n";
        cout.flush();
        int res;
        cin>>res;
        if(res==quart1*quart2)
            l=quart2+1;
        else if(res==quart1*(quart2+1))
        {
            l=quart1+1,r=quart2;
        }
        else if(res==(quart1+1)*(quart2+1))
        {
            r=quart1;
        }
    }
    cout<<"! "<<l<<"\n";
    cout.flush();
}

int main()
{
    int T=1;
    scanf("%d",&T);
    while(T--)
    {
        solve();
    }
    return 0;
}

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

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

相关文章

嵌入式学习之路 13(C语言基础学习——预处理命令)

编程流程 在进行程序开发时&#xff0c;通常遵循编辑源代码、编译、运行和调试这几个主要步骤。 编辑源代码&#xff1a;使用文本编辑器创建或修改程序的源代码&#xff0c;这是整个编程过程的起点。编译&#xff1a;将源代码转换为可执行文件的关键步骤。 预处理&#xff1a…

LeetCode.27.移除元素

题目描述&#xff1a; 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为 k&#xff0c;要通过此题&#xff0c;您需要执行以…

Mojo使用调试工具(Visual Studio Code)详解

Visual Studio Code 的 Mojo 扩展使您可以将 VS Code 的内置调试器与 Mojo 程序一起使用。(Mojo 扩展还支持调试 C、C++ 和 Objective-C。) 有关 VS Code 调试功能的完整介绍,请参阅 Visual Studio Code 中的调试。 本文介绍了可通过 Mojo 扩展获得的功能,以及 Mojo 调试…

【k8s集群部署篇】在openEuler环境下部署多master高可用kubernetes集群详细教程(V1.30版本)

【k8s集群部署篇】在openEuler环境下部署多master高可用kubernetes集群详细教程(V1.30版本) 一、相关名词介绍1.1 k8s简介1.2 Keepalived简介1.3 HAProxy简介二、本次实践介绍2.1 环境规划介绍2.2 本次实践简介三、所有节点基础环境配置3.1 主机配置工作3.2 关闭防火墙和seli…

[Unity实战]Mirror网络与Addressable场景管理

前言 很遗憾&#xff0c;Mirror包括UNET的场景管理不支持Addressables。我做手机游戏&#xff0c;需要实现服务器广播场景切换&#xff0c;但主程序没有场景&#xff0c;热更代码和资源都在AB包里。我已经在Google上搜索了一段时间&#xff0c;没有找到有用的解决方案。 Redd…

KVM——虚拟机中使用命令行形式安装虚拟机

目录 一. 删除虚拟机中的虚拟机步骤 二. 虚拟机中以命令行形式安装虚拟机 一. 删除虚拟机中的虚拟机步骤 这样就删除成功了。 二. 虚拟机中以命令行形式安装虚拟机 安装 [rootkvm-server ~]# virt-install --connect qemu:///system -n vm10 -r 3100 --disk path/var/lib…

【Material-UI】复杂按钮 (Complex Button) 自定义详解

文章目录 一、ButtonBase 组件简介二、实例讲解&#xff1a;创建复杂的图片按钮1. 样式定义2. 核心组件构建3. 交互效果 三、高级自定义技巧1. 响应式设计2. 动态内容与动画 四、总结 在现代 Web 应用中&#xff0c;按钮不仅仅是一个点击交互元素&#xff0c;它们也承载着传递信…

批发行业进销存-登录适配 android 横竖屏幕 源码CyberWinApp-SAAS 本地化及未来之窗行业应用跨平台架构

一、横竖屏切换的意义 以下是移动端横屏竖屏可切换在进销存中的一些重要应用&#xff1a; a、数据录入与查看 在录入商品信息、库存数量等大量数据时&#xff0c;横屏模式可以提供更宽阔的输入区域&#xff0c;减少输入错误。例如&#xff0c;在输入长串的商品编码或详细的商…

数值分析【1】

第一章&#xff1a; 相对误差 四 规格化浮点数 秦九韶 第二章&#xff1a; 二分法 不动点迭代法 Taylor 埃特金加速 构造新的同根函数 有个公式 牛顿法&#xff08;切线法&#xff09;、弦截法&#xff08;割线法&#xff09;

谷粒商城实战笔记-137-商城业务-首页-整合dev-tools渲染一级分类数据

文章目录 一&#xff0c;使用热加载工具spring-boot-devtools1&#xff0c;引入devtools依赖2&#xff0c;ctrlshiftf9 编译静态资源 二&#xff0c;thymeleaf原理三&#xff0c;渲染一级分类 一&#xff0c;使用热加载工具spring-boot-devtools 因为我们采用的前后端一体的开…

Windows 平台 Docker Protainer可视化平台,忘记登录密码,重置密码

下载protainer 的文件 运行重置密码的密令 docker run --rm -v C:\Users\Administrator\AppData\Local\Docker:/data portainer/helper-reset-password成功运行后可以看到重置的密码 把key 和db 文件重新上传到容器里 docker cp portainer.key portainer:/data/portainer.k…

5.10.结构化开发方法-结构化分析

案例分析第一题会考 结构化特点&#xff1a;自顶向下&#xff0c;逐步分解&#xff0c;面向数据。三大模型&#xff1a;功能模型&#xff08;数据流图&#xff09;、行为模型&#xff08;状态转换图&#xff09;、数据模型(E-R图)以及数据字典。 数据流图DFD 数据流图DFD基…

网络IO模型及零拷贝问题

文章目录 BIOaccept监听案例read案例利用多线程 NIO案例NIO存在的问题 IO multiplexing-IO多路复用文件描述符(FD&#xff0c;句柄&#xff09; 是什么reactor反应模式 select方法优点缺点小总结 poll方法优点缺点 epoll方法 Reactor模式单Reactor单线程 单Reactor多线程主从Re…

linux docker安装 gitlab后忘记root密码如何找回

1. docker ps - a 查看当前gitlab 当前的id2. docker exec -it gitlab /bin/bash 进入docker git 容器中【gitlab 注意可以上图中的name&#xff0c;也可以是id都可以的】,如下图3.gitlab-rails console -e production 输入该指令&#xff0c;启动Ruby on Rails控制台&…

Copy as cURL 字段含义

当前端在开发过程中&#xff0c;遇到接口错误反馈给后端人员时&#xff0c;一般在此接口处右键复制为cURL。 格式如下&#xff1a; curl https://xxx.xxx.cn/xxx/xxx/management/record/list \-H accept: application/json, text/plain, */* \-H accept-language: zh-CN,zh;q0…

LVS集群中的负载均衡技术

目录 1、LVS技术原理 2、NAT模式原理及部署方法 1、工作原理 2、部署方法 1、网络配置 2、软件安装与启用 3、测试 2、DR模式工作原理及部署方法 1、工作原理 2、部署方法 1、网络配置 2、解决vip响应问题 3、测试 3、ipvsadm命令及参数 1.管理集群服务中的增删…

数据同步工具之Flink CDC

Flink CDC&#xff08;Change Data Capture&#xff09;是基于Apache Flink的一个扩展&#xff0c;用于捕获和处理数据库中的数据变化。它能够实时捕获关系数据库中的数据变更&#xff08;如插入、更新、删除操作&#xff09;&#xff0c;并将这些变更流式传输到Flink进行处理。…

【OceanBase系列】—— OceanBase应急三板斧

作者&#xff1a; 花名&#xff1a;洪波&#xff0c; OceanBase 数据库解决方案架构师 目前随着OceanBase数据库越来越流行&#xff0c;社区已经有很多用户在生产环境使用了OceanBase&#xff0c;也有不少用户的核心业务用到了OceanBase数据库&#xff0c;在使用OceanBase数据库…

演示:基于WPF的DrawingVisual开发的矢量地图

一、目的&#xff1a;基于WPF的DrawingVisual开发的矢量地图 二、预览 默认样式 深黑样式 深蓝色样式 深蓝色透明样式 三、环境 VS2022&#xff0c;Net7&#xff0c;GDAL,审图号为GS(2019)1822号矢量数据,DrawingVisual 四、主要功能 支持多种显示样式&#xff08;默认样式&…

代码随想录27期|Python|Day39|​62. 不同路径​|​63. 不同路径 II​

62. 不同路径 简单题。由于规定了只能走右边和下边&#xff0c;所以右下角的值等于左对角线的两数之和。 1、确定dp和下标&#xff1a;二维数组&#xff0c;i&#xff0c;j分别为行和列&#xff0c;dp值为所需步数&#xff1b; 2、 初始化&#xff1a;只有上边和左边全部初始…