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

目录

T1:牛式

题目分析:

错因:

正确代码:

T2:歌曲

题目分析:

错因:

正确代码:

T3:牛棚移动

题目分析:

错因:

正确代码:

T4:齿轮传动

题目分析:

错因:

总结:

优点:

缺点:


T1:牛式

https://www.luogu.com.cn/problem/P1211

题目分析:

枚举三位数和两位数所有的可能,再根据可用的数以及数位要求进行check,check成功后用计数器将可行的方法数量记录下来,然后输出。

错因:

在有限的时间和水平下,为选择更加简易的暴力枚举方法。考试时,原思路是通过将可用的数进行组合,达到可行的可能,但自身能力不够,代码有漏洞,所以错误

正确代码:

#include<bits/stdc++.h>
using namespace std;
int ans;
bool shu[10001];
int check(int num) {
	while(num) {
		if(shu[num%10]==false) return 0;
		num/=10;
	}
	return 1;
}
int main() {
	int n,a;cin>>n;
	for(int i=1; i<=n; i++) {
		cin>>a;
		shu[a]=true;
	}
	for(int i=100; i<=999; i++) {
		for(int j=10; j<=99; j++) {
			if(i*(j/10)<=999&&i*(j/10)>=100&&i*(j%10)<=999&&i*(j%10)>=100&&i*j<=9999&&i*j>=1000) {
				if(check(i)&&check(j)&&check(i*(j%10))&&check(i*(j/10))&&check(i*j)) ans++;
			}
		}
	}
	cout<<ans;
	return 0;
}

T2:歌曲

https://www.luogu.com.cn/problem/P2035

题目分析:

第 i 首曲子有一个初始权值 Ri (1≤Ri≤10,000)。

当一首曲子播放完毕,接下来播放的将是所有曲子中权值最大的那首(如果有两首或多首曲子的权值相同,那么这些曲子中编号最小的那首会被选中)。

一首曲子在播放结束后,它的权值会被平均地分给其他 N−1 首曲子,它本身的权值清零。

如果一首曲子的权值无法被平均分配(也就是说,无法被 N−1 整除),那么被N−1 除的余数部分将会以 11 为单位,顺次分配给排名靠前的曲子(也就是说,顺序为曲目 11 、曲目 2⋯2⋯ 依次下去。当然,刚播放过的那首曲子需要被跳过),直到多出的部分被分配完。

此题仅需按题目要求模拟即可。

错因:

忘模拟了一种情况,并且循环的变量名有一点混乱。

正确代码:

#include<bits/stdc++.h>
using namespace std;
int n,t,a[1005],sum;
int main() {
	cin>>n>>t;
	for(int i=1; i<=n; i++) cin>>a[i];
	while(t--) {
		int mx=0,j=1;
		for(int i=1; i<=n; i++) {
			if(a[i]>mx) mx=a[i],j=i;
		}
		sum=a[j]/(n-1);
		cout<<j<<endl;
		for(int i=1; i<=n; i++) {
			if(i!=j) a[i]+=sum;
		}
		if(a[j]%(n-1)!=0) {
			sum=a[j]%(n-1);
			for(int i=1; i<=n&&sum; i++) {
				if(i!=j) a[i]++,sum--;
			}
		}
		a[j]=0;
	}
	return 0;
}

T3:牛棚移动

https://www.luogu.com.cn/problem/P6207

题目分析:

这是一道dfs的模板题,就像是走迷宫一样。

错因:

看到Special Judge这几个字就以为只用输出任意一个路径就可以了,但还是需要输出最短路径。

正确代码:

#include <bits/stdc++.h>
using namespace std;
int r,c,minn=2e9;
int b[50000][2],a[50000][2];
char mp[120][85];
bool vis[120][85];
int dx[5]={0,0,0,-1,1},dy[5]={0,1,-1,0,0};
void dfs(int x,int y,int step){
	a[step][0]=x;
	a[step][1]=y;
	if(x==r&&y==c){
		if(step<minn){
			minn=step;
			for(int i=0;i<=step;i++){
				b[i][0]=a[i][0];
				b[i][1]=a[i][1];
			}
		}
		return;
	}
	if(step>=minn) return;
	for(int i=1;i<=4;i++){
		int nx=dx[i]+x;
		int ny=dy[i]+y;
		if(nx<1||ny<1||nx>r||ny>c||vis[nx][ny]==true||mp[nx][ny]=='*')continue;
		vis[nx][ny]=true;
		dfs(nx,ny,step+1);
	}
}
int main(){
	cin>>r>>c;
	for(int i=1;i<=r;i++)for(int j=1;j<=c;j++)	cin>>mp[i][j];
	dfs(1,1,0);
	for(int i=0;i<=minn;i++)cout<<b[i][0]<<' '<<b[i][1]<<endl;
	return 0;
}

T4:齿轮传动

https://www.luogu.com.cn/problem/P2903

题目分析:

这是一道bfs的模板题,只需替换相关数据即可。

错因:

时间全去死磕前面的题了,没时间做。(时间规划!!!!!(虽然还是不会))

总结:

优点:

Ⅰ.做题策略可行,能在指定时间内完成会的题。

缺点:

Ⅰ.粗心,做第二题时忘记模拟了一种情况。

Ⅱ.对题目了解错误,导致第三题错误。

Ⅲ.自身实力还不足。所以菜就多练!!

希望下一次能拿到理想的成绩,加油!!

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值