2022暑期杭电第十场

2022暑期杭电第七场 个人题解提供处 阅读详情

1003题

Wavy Tree

题目链接

题目大意:

如果对于一个长度为 n n n ,下标从 1 1 1 开始的数组 a a a ,对于 ∀ i ∈ ( 1 , n ) \forall i \in (1, n) ∀i∈(1,n), 有 a [ i ] > m a x ( a [ i − 1 ] , a [ i + 1 ] ) a[i] > max(a[i - 1], a[i + 1]) a[i]>max(a[i−1],a[i+1]) 或者 a [ i ] < m i n ( a [ i − 1 ] , a [ i + 1 ] ) a[i] < min(a[i - 1], a[i + 1]) a[i]<min(a[i−1],a[i+1]) 成立,我们认为 a a a 数组是起伏不平的。

现在,给定一个长度为 n n n 且由正整数组成的数组 b b b ,你需要通过一下操作让数组 b b b 变得起伏不平:

  • 选定一个位置 i i i,让 b i b_i bi​ 增大或者减小 1 1 1 。

以上操作每次需要消耗 1 1 1 个硬币,问:要使得数组 b b b 变得起伏不平,最少需要耗费多少个硬币?

思路:

通过分析,我们知道:当我们确定了前三个数的相对关系后,后续的所有数的相对关系也随之确定,代价的计算方式也是相同的。

换而言之,我们需要决定的是奇数位置填较大的数还是偶数位填较大的数。直观的看,若将处理后的 b b b 数组在二维坐标系上表示出来,并连线,就是一条波浪线,所以称数组 b b b 起伏不平。

通过分析,对于每三个数,我们注意到:我们若只修改后两个数字,代价将会更低。由于我们修改最后一个数时,只涉及到与第二个数之间的相对关系,换而言之,每次我们只需要贪心的考虑 b i − 1 b_{i - 1} bi−1​ 和 b i b_i bi​ 两个数之间的大小关系即可,每次只修改 b i b_i bi​ ,就能使得最终答案最优。

参考代码:

#include <iostream>
using namespace std;
const int N = 1e6 + 5;
typedef long long ll;
ll b1[N], b2[N];
ll sum = 0;

void cal(ll a[], int i, bool flag) {
	if(flag) {
		if(a[i - 1] <= a[i])
			sum += a[i] - a[i - 1] + 1, a[i] = a[i - 1] - 1;
	} else {
		if(a[i - 1] >= a[i])
			sum += a[i - 1] - a[i] + 1, a[i] = a[i - 1] + 1;
	}
}

void solve() {
	int n; cin >> n;
	for(int i = 1; i <= n; i ++ ) {
		cin >> b1[i]; b2[i] = b1[i];
	}
	ll ans = 2e18; sum = 0;
	for(int i = 2; i <= n; i ++ )
		if(i & 1) cal(b1, i, 1);
		else cal(b1, i, 0);

	ans = min(ans, sum);
	sum = 0;
	for(int i = 2; i <= n; i ++ )
		if(i & 1) cal(b2, i, 0);
		else cal(b2, i, 1);

	ans = min(ans, sum);
	cout << ans << endl;
}

int main() {
	ios::sync_with_stdio(false);
	cin.tie(nullptr); cout.tie(nullptr);
	int t; cin >> t;
	while(t -- ) {
		solve();
	}
	return 0;
}

1007题

Even Tree Split

原题链接

题目大意

给定一个长度为 n n n 的无向树,你需要删除其中的一些边,使得剩下的组件的节点数为偶数,求满足条件的删法数量

思路

对整个树进行深搜并计算相对应的节点数量,记录偶数节点的数量为 c n t cnt cnt ,那么答案就是 2 c n t − 1 2 ^ {cnt} - 1 2cnt−1

代码

#include<iostream>
#include<string.h>
#include<vector>
#define int long long
using namespace std;
const int N = 1e5+50;
const int mod = 998244353;
vector<int> g[N];
int cnt; 
int sum[N];
void dfs(int u,int fa){
    int len = (int)g[u].size();
    sum[u] = 1;
    for(int i = 0;i < len;i ++){
        int v = g[u][i];
        if(v == fa)continue;
        dfs(v,u);
        sum[u] += sum[v];
    }
    if(sum[u] % 2 == 0 && u != 1)cnt++;
}


void solve(){
    memset(sum,0,sizeof sum);
    int n;
    cin>>n;
    for(int i = 1;i <= n;i ++)g[i].clear();
    for(int i = 0;i < n-1;i ++){
        int u,v;
        cin>>u>>v;
        g[u].push_back(v);
        g[v].push_back(u);
    }
    cnt = 0;
    dfs(1,0);
    int ans = 1;
    for(int i = 1;i <= cnt;i ++){
		ans = ans * 2 % mod;	
	}
	cout<<ans-1<<endl;
}

signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    int t;
    cin>>t;
    while(t--)solve();
    system("pause");
    return 0;
}

1009题

Painting Game

原题链接

题目大意

A A A 和 B B B 轮流涂色,保证不能有两个相邻格子上色,且一直行动到无法在任何一个格子涂色为止, A A A 想让涂色最小化, B B B 想让涂色最大化,求最后上色的个数。

分析

由于需要一直涂色直到一方无法涂为止,所以在双方都采取最佳策略的情况下, A A A 的策略是在最右涂色位置的三格之后涂色,以确保中间两格一定不可使用; B B B 的策略时在最右涂色位置的四格后涂色,以确保中间的格子必须涂上,所以形成了一个 7 7 7 的循环节,每 7 7 7 个格子中有 3 3 3 个涂满。这样只需考虑小于 7 7 7 的情况,枚举一下即可。

代码

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

typedef long long ll;
typedef double db;

int T,n;
string str;
int a[7]={0,1,1,1,2,2,3},b[7]={0,1,1,2,2,3,3};

int main()
{
    scanf("%d\n",&T);
    while(T--)
    {
        scanf("%d ",&n);
        cin>>str;
        int ans=n/7*3;
        if(str[0]=='A') ans+=a[n%7];
        else ans+=b[n%7];
        printf("%d\n",ans);
    }
    return 0;
}
别再为SCI论文配图发愁了!手把手教你用PS+AI搞定从数据图到模式图的全流程 本文详细解析了如何利用Photoshop(PS)和Illustrator(AI)高效完成SCI论文配图的全流程,涵盖数据可视化、模式图设计及期刊适配性输出。通过实战案例,帮助科研人员掌握位图与矢量图的处理技巧,提升论文配图质量,满足不同期刊的出版要求。 阅读详情

相关推荐

硬件开发实践:高速 PCB 差分信号与时钟同步优化

由两条互补信号线组成(正负极)接收端只关注两线之间电压差共模噪声对两线同时作用,可被抵消。

2501_93174775的博客 394

2022杭电暑期第十场个人题解

无

king1985560081的博客 246

微磁模拟实战指南:从OOMMF安装到首个3D模型运行

本文详细介绍了OOMMF微磁模拟软件的安装与使用,从环境配置到首个3D模型运行的完整教程。涵盖Windows、Linux和macOS平台的安装避坑指南,以及MIF文件编写、并行计算优化等实战技巧,帮助研究人员快速掌握这一开源工具在磁畴壁运动、磁滞回线等微磁学问题中的应用。

weixin_29294597的博客 153

2022暑期杭电第八场

个人题解提供处

ACM_admin的博客 568

BSW: Dcm模块配置--28服务

这个章节讲解下UDS中的28服务(Communcation Control)的配置,顾名思义,对当前ECU的通讯状态进行变更,主要设置应用报文,网络管理报文的收发控制,通常应用在刷写APP软件时,降低总线负载。这里首先要提醒的一点是,28服务几乎不需要手写代码,只有在客户需求要求前置条件不满足时报特定NRC时才需要填充代码。实际配置中主要涉及的模块有DCM,BSWM,ComM,RTE.2.BswM模块的配置。3.ComM模块的配置。1.DCM模块的配置。

Forever_Oct的博客 3086

C#利用最小二乘法拟合任意次函数曲线

给出一组离散点,确定一个函数逼近原函数,插值是这样的一种手段。在实际中,数据不可避免的会有误差,插值函数会将这些误差也包括在内。因此,我们需要一种新的逼近原函数的手段: ①不要求过所有的点(可以消除误差影响);②尽可能表现数据的趋势,靠近这些点。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小 [1],其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达,具体可以查阅相关资料。最小二乘法(又称最小平方法)是一种数学技术。

qq_30725967的博客 3755

2022暑期杭电第九场

个人题解提供处

ACM_admin的博客 513

YOLOv11改进 | 网络结构代码逐行解析(二) | yolov11中的Mosaic增强详解

本文给大家带来的是YOLOv10中的Mosaic增强代码的详解,可能有部分人对于这一部分比较陌生,有的读者可能知道Mosaic增强但是不知道其工作原理,具体来说Mosaic增强就是指我们的数据集中的图片在输入给模型之前的一个处理过程(我们的图片并不是直接就输入给模型了,大家的训练结果中的结果检测图片大家可以看到数据集中多个图片会组合在一起这就是简单的Mosaic增强),下面我就来讲解一下其在YOLOv10中工作原理和代码定义,下面图片为一个Mosaic增强后的图片。​。

Snu77的博客 5021

2022暑期杭电第六场

个人题解提供处

ACM_admin的博客 290

(五)激光线扫描-位移台标定

线激光属于主动测量方式,但是由于线激光的特性,我们只能通过提取激光中心线获取这一条线上的高度信息,那么要进行三维重建的话,就需要通过平移或者是旋转的方式,来让线激光扫描被测物体的完整轮廓,也就是整个表面。激光线的密度越高还原出来的物体越细腻,但由于数据量大,也会导致速度变慢。下面以位移台为例讲解,如何标定位移台。

FlyWine的博客 2890

【72】【OpenCV C++ & C#】 将cv::Mat 图像转换成imgINFO 传给c#在winform上显示,OpenCV C++如何将处理后的图像传给C#呢? 如何获取图像信息呢?

本文介绍了通过OpenCV C++处理图像后传递给C#的方法。首先定义了一个结构体imgINFO存储图像信息(数据指针、宽高、通道数等),然后通过getImgInfo函数将cv::Mat转换为该结构体。文章特别指出当图像宽度不能被4整除时可能出现失真问题,并给出了两种解决方案:调整输入图像或创建新的对齐图像。此外还解释了img.step和img.cols*img.elemSize()的关系,说明它们在大多数情况下是相等的。最后提到需要通过DLL将结构体传递给C#(具体方法参见其他文章)。

程序员,他们想的是什么?他们想的永远都是技术,他们崇尚的也永远都是技术。 697

2022杭电多校(四)

2022杭电多校(四)

m0_54646258的博客 1189

【K210+STM32项目】基于K210与STM32协同工作的智能垃圾分类系统设计与实现(更新3.0版本)(完整工程资料源码)

STM32F407STM32F407_2(含有app功能)

嵌入式技术开发 2492

2022暑期杭电第五场

个人题解提供处

ACM_admin的博客 451

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

2022暑期杭电第三场

个人题解提供处

ACM_admin的博客 879

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

2022杭电暑期第四场个人题解

杭电4

qazwsx220312的博客 401

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

2022杭电暑期第二场个人题解

第一次参加杭电多校看没人写题解本蒟蒻就浅写一下

qazwsx220312的博客 665

2022暑期杭电第四场

个人题解提供处

ACM_admin的博客 447

2022杭电暑期第一场个人题解

第一次打杭电暑期多校写下题解

king1985560081的博客 312

2022杭电暑期第三场个人题解

无

king1985560081的博客 390

【补题日记】[2022杭电暑期多校3]K-Taxi

而本题加入w的限制后,有以下两种二分思路来做:(经过测试,第一种虽做法虽然只比第二种多了个log,但是因为此处的n比较大,因此不能通过;1、直接二分答案,比如想要判断答案是不是大于等于x,那么找到第一个权值大于等于x的点,根据上面的式子求出原始模型的距离,然后与x比较即可。考虑判断第x个城镇,它的点权为a[x].w,求出编号大于等于x的城镇中到询问点的最大曼哈顿距离d。因为外面有一层二分,里面可以使用lower_bound二分得到点的下标,因此总的时间复杂度为。的时间求出距离该点的曼哈顿距离最大值。....

cls1277的博客 269

【补题日记】[2022杭电暑期多校1]C-Backpack

使用滚动数组将第一维滚掉,用bitset优化掉最后一维。表示前i个物品,异或和为j,体积为k的方案是否存在。位为1,就说明可以恰好装满整个背包。说明此处使用左移可以理解为,当第。,也就是bitset的第。.........

cls1277的博客 389

【补题日记】[2022杭电暑期多校1]B-Dragon slayer

关于坐标加0.5的处理方法对每个点维护该点的上下左右四条边的情况,从而在搜索的时候按照上一个点来的方向判断那条边点的情况,即。思路就是直接状压,用1表示该墙存在,0表示不存在,求保证能从起点走到终点的前提下,求0的个数的最小值。这里犯了个错误,就是将表示状态的数从小到大枚举的时候,如果发现可以了直接就break了,其实不然。,因此一旦满足条件不能直接break,而是循环完所有的状态后,对0的个数取最小值才为答案。思路还是比较简单的,犯了几个细节错误。......

cls1277的博客 306

2022杭电暑期第七场个人题解

无

king1985560081的博客 237

【补题日记】[2022杭电暑期多校3]B-Boss Rush

这个题的题意我感觉不太好理解,我也是边写边调才慢慢理解了出题人的想法 ,但是单调性还是很容易看出来,因此本题就是二分答案。因为当时看了思路之后自己写了一下自己以为的正解,还调了好几个小时才发现自己的写法和std的区别在哪,因此没有再对照着std写一遍,而是将那部分时间用来研究思路以及为什么错。而状压dp的写法可以避免这种问题,通过状态的积累,来到当前状态的即为最优状态,只需要考虑当前这个技能是否全都打完即可。因此通过状态的累计计算就可以得到T帧下能否打出H的伤害,也就可以判断T帧是否满足条件。...

cls1277的博客 303
上一篇: 2022暑期杭电第九场
下一篇: 2022暑期牛客第九场
TGUACM_admin
博客等级 码龄4年 7粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值