信竞2024年csp-j模拟赛第二场赛后总结

T1:Mixing Milk

题目分析:

这是一道模拟题,通过for循环模拟倒牛奶的过程

正确代码:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int c[4],m[4];
int main() {
	for(int x=1; x<=3; x++)cin>>c[x]>>m[x];
	for(int x=1; x<=100; x++) {
		int f=(x-1)%3+1,s;
		if(f==3)s=1;
		else s=f+1;
		int mi=min(c[s]-m[s],m[f]);
		m[f]-=mi;
		m[s]+=mi;
	}
	cout<<m[1]<<endl<<m[2]<<endl<<m[3];
	return 0;
}

错因:

未开long long

T2:Convention S

题目分析:

这是一道二分答案的题,通过二分寻找最大时间的最小值

正确代码:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int a[100005];
int main() {
	int n,m,c;cin>>n>>m>>c;
	for(int i=1; i<=n; i++) cin>>a[i];
	sort(a+1,a+n+1);
	int l=0,r=a[n]-a[1];
	while(l<r) {
		int mid=(l+r)/2,cnt=1,sum=1;
		for(int i=1; i<=n; i++)
			if(a[i]-a[sum]>mid||i-sum+1>c) {
				cnt++;
				sum=i;
			}
		if(cnt<=m)r=mid;
		else l=mid+1;
	}
	cout<<l;
	return 0;
}

错因:

思路错误,以为是模拟题

T3:Mooyo Mooyo S

题目分析:

这是一道关于dfs联通块的问题,在消除相同的数后下落

正确代码:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int n,k;
char a[105][105];
int vis[105][105],s,dx[5]= {0,0,0,1,-1},dy[5]= {0,1,-1,0,0};
void dfs(int x,int y,char t) {
	s++;
	vis[x][y]=1;
	for(int i=1; i<=4; i++) {
		int nx=x+dx[i],ny=y+dy[i];
		if(nx<1||nx>n||ny<1||ny>10||vis[nx][ny]||a[nx][ny]!=t) continue;
		dfs(nx,ny,t);
	}
}
int main() {
	cin>>n>>k;
	for(int i=1; i<=n; i++) for(int j=1; j<=10; j++) cin>>a[i][j];
	while(1) {
		int f=0;
		for(int i=1; i<=n; i++) {
			for(int j=1; j<=10; j++) {
				if(a[i][j]!='0') {
					for(int i=1; i<=n; i++) for(int j=1; j<=10; j++) vis[i][j]=0;
					s=0;
					dfs(i,j,a[i][j]);
					if(s>=k) {
						f=1;
						for(int k=1; k<=n; k++) for(int l=1; l<=10; l++) if(vis[k][l]) a[k][l]='0';
					}
				}
			}
		}
		for(int i=1; i<=10; i++) {
			for(int j=n; j>=1; j--) {
				if(a[j][i]=='0') {
					int tp=0;
					for(int k=j-1; k>=1; k--) {
						if(a[k][i]!='0') {
							tp=k;
							break;
						}
					}
					if(tp!=0) a[j][i]=a[tp][i],a[tp][i]='0';
				}
			}
		}
		if(!f) break;
	}
	for(int i=1; i<=n; i++) {
		for(int j=1; j<=10; j++) cout<<a[i][j];
		cout<<endl;
	}
	return 0;
}

错因:

下落代码错误

T4:道路修建

题目分析:

这是一道关于树的题,通过求每一个点的两个子树的大小只差的绝对值乘道路的长度最后想家求总费用

正确代码:

无(没改出来,不知为和一直错)

总结:

优点:

1.T1代码实现正确

缺点:

1.未看数据范围

2.做题思路错误

3.代码基础不扎实

相关推荐
如意猴8 分钟前
【C++】007 C/C++ 内存管理机制、malloc与new的区别及模板初阶
java·c++·算法
朝朝辞暮i12 分钟前
C++ 第 32 课:main()、rclcpp::init()、spin()、shutdown()
开发语言·c++·算法
汉克老师17 分钟前
GESP2026年9月认证C++一级( 第三部分编程题(1、新龟兔赛跑))精讲
c++·gesp·小学生·学c++编程
沫璃染墨42 分钟前
《从零入门Linux系统篇(五十七):线程篇·十——生产者消费者模型进阶:从环形缓冲区到POSIX信号量》
linux·运维·服务器·开发语言·c++·系统架构·信号处理
wuminyu1 小时前
LockStack在虚拟线程Mount和Unmount拷贝过程剖析
java·linux·c语言·jvm·c++
Logic1011 小时前
C语言/数据结构排序题解:三个数的最大乘积——排序后比较两种候选情况
c语言·数据结构·数组·排序·时间复杂度·算法题·负数处理
知识分享小能手1 小时前
C++ 学习教程,从入门到精通,string类和标准模板库 — 完整知识点详解(16)
开发语言·c++·学习
无忧.芙桃2 小时前
位图妙用:512MB 实现 40 亿整数的存在性查询
c语言·c++·面试·哈希算法
ShineWinsu2 小时前
对于Redis:Steam、Geospatial、Hyperloglog、Bitmap、Bitfield类型的解析
数据库·c++·redis·分布式·缓存·面试·zset
朝朝辞暮i2 小时前
C++ 第 31C 课:Subscriber 到底是什么
开发语言·c++·算法