Educational Codeforces Round 170 (Rated for Div. 2)(A~E题解)

news2025/2/26 18:53:11

本场也算是对我努力的一个reward吧,也是非常nice啊,话不多说,先写题解,写完直接休息

A. Two Screens

思路:我们先去想其最多需要多少次,也就是两个串长度之和,然后在哪里有优化呢?就是说两个串之间有可能有相等的前缀,可以将前缀直接拓印过来,将相同长度k的的前缀串复制过来,将操作化简为1,直接用sum-k+1即可,当然了,有可能有相同的部分为0,如果为0,直接输出两个串长度之和

#include<bits/stdc++.h>
using namespace std;
#define int long long

int q;
string s,t;
void solve()
{
	cin>>s>>t;
	int cnt=0;
	int sum=s.size()+t.size();
	for(int i=0;i<min(s.size(),t.size());i++)
	{
		if(s[i]==t[i])
		cnt++;
		else
		break;
	}
	if(cnt==0)
	cout<<sum<<"\n";
	else
	cout<<sum-cnt+1<<"\n";
}
signed main()
{
	cin>>q;
	while(q--)
	solve();
	return 0;
}

B. Binomial Coefficients, Kind Of

思路:看题就是说求错误的最终结果,我们每次取的都是左边一个+左上一个

我们手玩一下就发现了规律,第k列的值就是2的k次方,直接用快速幂

#include<bits/stdc++.h>  
using namespace std;  
#define int long long  

int t;  
const int mod = 1e9 + 7;  
int n[100005];  
int k[100005];  

// 快速幂公式  
int fast(int a, int b)   
{  
    long long result = 1;  
    long long base = a % mod;  // 计算base时取mod,防止溢出  
    while (b > 0)   
    {  
        if (b % 2 == 1)   
        {  
            result = (result * base) % mod;  
        }  
        base = (base * base) % mod;  
        b /= 2;  
    }  
    return result;  
}  

signed main()  
{  
    cin >> t;  
    for (int i = 1; i <= t; i++)  
    {  
        cin >> n[i];  
    }  
    for (int i = 1; i <= t; i++)  
    {  
        cin >> k[i];  
    }  
    for (int i = 1; i <= t; i++)  
    {  
        cout << fast(2, k[i]) << "\n";  
    }  
    return 0;  
}

 C. New Game

思路:我们首先需要用一个map去统计每个数出现的次数,然后快排一下,去重,跑一遍单调队列,我们在单调队列中去处理结果

我们用sum去表示过程中的值,ans表示最终的最大值

如果队列不为空并且当前要插入的元素和队尾元素差值不是1,那么去更新最大值,然后将sum变为0 

如果队列不为空,但是插入的值和第一个元素的值差值大于等于k,说明插入的元素要多于k了,因此我们需要将队首元素弹出,并且sum-队首元素的次数

#include<bits/stdc++.h>
using namespace std;

int t;
int n, k;
int a[200005];
map<int, int> mp;
struct node
{
    int x;
    int cnt;
};
deque<node> que;
void solve()
{
    cin >> n >> k;
    mp.clear();
    for(int i = 1; i <= n; i++)
    {
        cin >> a[i];
        mp[a[i]]++;
    }
    sort(a + 1, a + 1 + n);
    int len = unique(a + 1, a + 1 + n) - (a + 1);
    vector<node> q(len + 1);
    for(int i = 1; i <= len; i++)
    {
        q[i].x = a[i];
        q[i].cnt = mp[a[i]];
    }
    int sum = 0;
    int ans = 0;
    for(int i = 1; i <= len; i++)
    {
        if (!que.empty() && q[i].x - 1 != que.back().x)
        {
        	ans = max(ans, sum);
            sum = 0;
            while (!que.empty())
            {
                que.pop_back();
            }
        }
        while (!que.empty() && que.front().x<=q[i].x-k)
        {
        	ans = max(ans, sum);
            sum -= que.front().cnt;
            que.pop_front();
        }
        que.push_back(q[i]);
        sum += q[i].cnt;
        ans = max(ans, sum);
    }
    cout << ans << "\n";
    while (!que.empty())
    {
        que.pop_back();
    }
}

signed main()
{
	ios_base::sync_with_stdio(0);
	cin.tie(0);
    cout.tie(0);
    cin >> t;
    while (t--)
        solve();
    return 0;
}

D. Attribute Checks

思路:我们只需要去枚举每个0的位置,然后用dp[i]去表示前面加了i次智力的最大值,如果前面有cnt个0,那么就是加了cnt-i次力量,然后去统计每次属性之后的最值

#include<bits/stdc++.h>
using namespace std;
#define int long long
int t;
int n,m;
int a[2000005];
int dp[2000005];
int zhi[2000005];
int wu[2000005];
void solve()
{
	cin>>n>>m;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	int cnt=0;
	for(int i=1;i<=n;i++)
	{
		if(a[i]>0)
		{
			zhi[a[i]]++;
		}
		if(a[i]<0)
		{
			wu[-a[i]]++;
		}
		if((a[i]==0&&cnt<2*m)||i==n)  
        {  
            for (int j=1;j<=cnt;j++)  
            {
            	zhi[j]+=zhi[j-1];
				wu[j]+=wu[j-1];  
			}
            for (int j=0;j<=cnt;j++)  
            {
            	dp[j]+=zhi[j]+wu[cnt-j];
		    }
            for (int j=cnt+1;j>0;j--)  
            {
            	dp[j] = max(dp[j],dp[j-1]);  
			}
            cnt++;
            for (int j=1;j<=cnt;j++)  
            {
            	zhi[j]=0;
				wu[j]=0;  
			}
        }  
	}
	int ans=0;
	for(int i=1;i<=cnt;i++)
	{
		ans=max(ans,dp[i]);
    } 
    cout<<ans<<"\n";
	return;
}
signed main()
{
	t=1;
	while(t--)
	solve();
	return 0;
}

E. Card Game

等白天来更新思路,太困了,不想码字了 

#include<bits/stdc++.h>  
using namespace std;  
#define int long long  
const int MAX = 1007, MOD = 998244353;  

int dp[1007][1007];    
int fac[1007];        
int inv[1007];         

int fastpow(int a, int b, int mod)   
{  
    int res = 1;  
    while (b)   
    {  
        if (b & 1) 
            res = res * a % mod;
        a = a * a % mod; 
        b >>= 1;
    }  
    return res;  
}  


int calc(int n, int cnt)   
{  
    return (fac[2 * n - cnt] * inv[n - cnt] % MOD * inv[n] % MOD - fac[2 * n - cnt] * inv[n - cnt - 1] % MOD * inv[n + 1] % MOD + MOD) % MOD;  
}  

void solve()   
{  
    int n, m;  
    cin >> n >> m;
    fac[0] = 1;  
    
    for (int i = 1; i < MAX; i++)  
        fac[i] = fac[i - 1] * i % MOD;  

    
    inv[MAX - 1] = fastpow(fac[MAX - 1], MOD - 2, MOD);  
    for (int i = MAX - 2; i >= 0; i--)  
        inv[i] = inv[i + 1] * (i + 1) % MOD;  

    
    for (int i = m; i >= 0; i -= 2)   
    {  
        dp[1][i] = calc((m + i) / 2, i);  
    }  

    for (int i = 2; i <= n; i++)   
    {  
        for (int j = 0; j <= m; j++)   
        {  
            for (int k = 0; k <= j; k++)   
            {  
                if ((j - k + m) % 2 == 0)  
                    dp[i][k] = (dp[i][k] + dp[i - 1][j] * calc((j - k + m) / 2, j - k) % MOD) % MOD;  
            }  
        }  
    }  
    
    cout << dp[n][0] << '\n';  
}  

signed main()   
{  
    ios_base::sync_with_stdio(false);  
    cin.tie(0);  
    cout.tie(0);  
    solve(); 
    return 0;  
}

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

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

相关文章

pip安装opencv和imageio_ffmpeg慢,pip使用清华镜像源

文章目录 一、在命令行使用二、修改配置文件 pip.ini 一、在命令行使用 1、普通安装 pip install package pip install opencv-python2、使用清华源进行安装&#xff08;暂时&#xff09; pip install -i https://pypi.tuna.tsinghua.edu.cn/simple package pip install -i …

从opencv-python入门opencv--GUI功能之绘图鼠标与图像界面的交互

从opencv-python入门opencv--GUI功能之绘图和鼠标操作 一、文章介绍二、opencv绘制直线、矩形、圆形1、cv.line()2、cv.circle()3、cv.rectangle()4、在图像上绘制直线、矩形和圆形5、cv.ellipse()&#xff08;在空白画布上绘制椭圆&#xff09;&#xff08;1&#xff09;img …

Linux的Spark 环境部署

前言:需自行准备hadoop集群 1. Spark 是一款分布式内存计算引擎&#xff0c; 可以支撑海量数据的分布式计算。 Spark 在大数据体系是明星产品&#xff0c; 作为最新一代的综合计算引擎&#xff0c; 支持离线计算和实 时计算。 在大数据领域广泛应用&#xff0c; 是目前世界上使…

关于Java部署项目,文件上传路径问题 、Windows是\ linux是/

Windows是\ linux是/ &#xff0c;踩坑。报错如下&#xff1a;

HyperWorks汽车B-柱网格变形

在这一节&#xff0c;将练习如何使用变形域&#xff0c;实现汽车 B-柱有限元模型的网格变形。 图 7-13 网格变形前后的 B 柱模型 Step01&#xff1a;读取并查看模型。 打开模型文件 Exercise_7c.hm。 Step02&#xff1a;创建变形域。 (1) 通过路径 HyperMorph > Morph…

SDV 峰会聚焦:下一代软件定义汽车的关键开源技术

10 月 17 - 18 日&#xff0c;由 GOSIM 开源创新汇主办、CSDN 承办的 GOSIM CHINA 2024 将在北京盛大启幕。作为 GOSIM 开源年度大会的第三届盛会&#xff0c;本次活动邀请了 60 多位国际开源专家&#xff0c;汇聚了来自全球百余家顶尖科技企业、知名高校及开源社区的技术大咖、…

量子计算机的原理与物理实现

量子计算机的原理与物理实现很复杂 指导性原则 首先思考制备一台量子计算机需要些什么&#xff1f; 需要量子比特——二能级量子系统。除了量子计算机需要满足一些物理特性&#xff0c;它还必须要把量子比特绘制到某种初态上&#xff0c;以及测量系统的输出态。 而实验上的挑战…

Vue检测获取最新资源 解决浏览器缓存问题

Vue检测获取最新资源 解决浏览器缓存问题 1、在public文件夹下创建version.json文件2、vue.config.js中&#xff0c;每次打包动态更新version.json内容3、App.vue中使用定时器去检测版本号和本地是否有差异 背景&#xff1a;由于浏览器缓存问题&#xff0c;vue2项目发布后&…

毕业设计选题:基于ssm+vue+uniapp的实习记录小程序

开发语言&#xff1a;Java框架&#xff1a;ssmuniappJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;M…

数码准备记录

1.数据结构 常见的数据结构包括数组、链表、栈、队列、树&#xff08;如二叉树、B树、B树&#xff09;、图等 2.队列和栈的区别 队列是一种先入先出的数据结构&#xff0c;即最先加入的元素被最先移除&#xff1b; 栈是一种后进后出的数据结构&#xff0c;即最后加入的元素…

nbsaas vue3管理后台框架

nbsaas vue3管理后台框架 一、项目概述 Nbsaas Admin Vue 是一个基于 Vue.js 3.0 构建的轻量级后台管理系统&#xff0c;结合了现代前端技术栈的最佳实践&#xff0c;旨在帮助开发者快速构建具有高可扩展性和良好用户体验的后台管理系统。该项目拥有简洁的 UI 设计&#xff0…

计算机性能的指标

CPI——每条指令的时钟周期数&#xff08;执行一条指令所需的时间周期&#xff09;

基于SpringBoot+Vue+MySQL的社区医疗管理系统

系统展示 用户前台界面 管理员后台界面 系统背景 在当前医疗体系日益完善的背景下&#xff0c;社区医院作为基层医疗服务的重要一环&#xff0c;其管理效率和服务质量直接关系到居民的健康福祉。传统的社区医院管理模式存在效率低下、资源分配不均、患者就医体验差等问题。为了…

SpringBoot技术在人事管理中的应用:系统开发全解析

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统&#xff0c;它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等&#xff0c;非常适…

高德地图怎么定位自己的店铺位置?

在现代社会&#xff0c;像高德地图这样的导航软件已经成为我们日常生活中不可或缺的重要工具。无论是通勤出行&#xff0c;还是寻找周边商家&#xff0c;地图导航都发挥着关键作用。尤其是对于商家来说&#xff0c;地图导航的标注定位功能更是一个增加店铺曝光、获取客流量的有…

再给我两分钟,我能教会你使用 nvm 一键搞定node 和 npm

1. nvm简介 NVM&#xff08;Node Version Manager&#xff09;是Node.js的版本管理工具&#xff0c;它允许用户在同一台机器上安装和管理多个Node.js版本。这对于需要在不同项目之间切换Node.js版本的开发者来说非常有用&#xff0c;因为不同的项目可能依赖于不同版本的Node.js…

【Linux探索学习】第五弹——Linux用户管理:创建、删除与查看普通用户

前言&#xff1a; Linux下创建普通用户是我们以后经常要做的一件事&#xff0c;一个超级用户下可以有多个普通用户&#xff0c;这样我们就可以用这些普通用户去做不同的事情&#xff0c;所以学习如何创建并管理这些用户就显得尤为重要 提醒&#xff1a;本篇是在Ubuntu系统下进行…

brew install 无法从ghcr.io/v2/homebrew/core下载安装,兴奋解决

痛苦的经历 使用mac的同学都会经常使用brew 工具安装,我本来是需要安装一下ffmpeg来着&#xff0c;我就执行以下命令 brew install py3cairo ffmpeg> Downloading https://ghcr.io/v2/homebrew/core/openssl/3/blobs/sha256:32da4055066fca85ebd5057718d0ec5c80eb162f796 …

Java | Leetcode Java题解之第467题环绕字符串中唯一的子字符串

题目&#xff1a; 题解&#xff1a; class Solution {public int findSubstringInWraproundString(String p) {int[] dp new int[26];int k 0;for (int i 0; i < p.length(); i) {if (i > 0 && (p.charAt(i) - p.charAt(i - 1) 26) % 26 1) { // 字符之差为…

Java 多线程(一)—— 线程的创建与属性

线程的创建 方式一&#xff1a;继承 Thread 类&#xff0c;重写 run 方法 class MyThread extends Thread {Overridepublic void run() {System.out.println("hello Thread");} }方式二&#xff1a;实现 Runnnable 接口&#xff1a; class MyRunnable implements …