CSP-J复赛模拟5补题报告

     CSP-J复赛模拟补题报告

                    2023.10.6星期five       

1.比赛情况

T1(repeat):100

T2(multiplication):100

T3(summation):50

T4(point)0

2.比赛过程

T1大概10分钟就做完了,想到那个思路就直接猛猛写。就是在b和a是空串的输入方面想了想不过最后也说了没有size()=0的情况。

T2没看见数字最大99,把a,b分离数位一位一位加的,不过貌似多次一举了。。。

T3直接去找规律,演样例发现没问题了就去试了试大数据,结果输出的和数据不一样,后来发现我桶标记的时候写的是++。考后发现越界了,也是桶标记数组越界需要用map优化,并且取余还写错地方了。

T4白兰地

3.题解报告

1.重复判断repeat

1.题意

2.题解

先判断下a是否是b长度上的倍数,不是就NO了,是的话让b自增a.size()/b.size()倍(需要新变量)

然后判断是否跟a相同。

3.AC码
#include<iostream>
using namespace std;
int main(){
//	freopen("repeat.in","r",stdin);
//	freopen("repeat.out","w",stdout);
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	long long t;
	cin>>t;
	for(int i=1;i<=t;i++){
		string a,b;
		cin>>a>>b;
		if(b.size()==0&&a.size()!=0){
			cout<<"NO"<<endl;
			continue;
		}
		if(a.size()%b.size()!=0){
			cout<<"NO"<<endl;
			continue;
		}
		string sum="";
		for(int i=1;i<=a.size()/b.size();i++){
			sum+=b;
		}
		if(sum==a){
			cout<<"YES"<<endl;
		}
		else{
			cout<<"NO"<<endl;
		}
	}
	return 0;
}

2.歪果仁学乘法multiplication

1.题意

2.题解

乍一看挺唬人的,其实本质就是仅有两位数的数位相加。将每个的个位和十位都乘了求和。

3.AC码
#include<iostream>
using namespace std;
int main(){
	freopen("multiplication.out","w",stdout);
	freopen("multiplication.in","r",stdin);
	ios_base::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int c[3],a,b,ans=0,sum=0;
	cin>>a>>b;
	while(a!=0){
		sum++;
		c[sum]=a%10;
		a/=10;
	}
	while(b!=0){
		for(int i=1;i<=sum;i++){
			ans+=c[i]*(b%10);
		}
		b/=10;
	}
	cout<<ans;
}

3.去重求和summation

1.题意

2.题解

因为数据范围很大,所以我们需要想写优化策略。

尝试观察序列a,b,c,d,e。

sum中a出现了(5-1)*1次,b(4-1)*2,c(3-1)*3....

所以a[i]所加的值就是a[i]*(n-i+1)*i。

如果出现重复的,需要将上次出现的a[i]到开头所加的所有a[i]的值删掉

重复遍历i,将每一位都加好后就AK了。

注意判断重复所用的数组需要用map优化,不然就像我一样爆了。

3.AC码
#include<iostream>
#include<map>
using namespace std;
long long n,a[500500],ans;
const int N = 1e9+7;
map<long long,int>f; 
int main(){
//	freopen("summation.in","r",stdin);
//	freopen("summation.out","w",stdout);
	cin>>n;
	for(long long i=1;i<=n;i++){
		cin>>a[i];
		if(f[a[i]]==0){
			ans+=(a[i]*(n-i+1)%N*i)%N;
			f[a[i]]=i;
		}
		else{
			ans+=(a[i]*(n-i+1)%N*i)%N;
			ans-=((n-i+1)*f[a[i]]%N*a[i])%N;
			f[a[i]]=i;
		}
	}
	cout<<ans%N;
	return 0;
} 

4.点集操作point

不会做QWQ

五天比赛总结

总分810,全班第一鸭!!!

有许多用法都没有搞明白,第四题基本纯骗分,除此之外还是很不错低(嘻嘻)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
CSP-J复赛历年试题pdf是指CSP-J的复赛历年试题的PDF文件。CSP-J是中国计算机学会(CCF)主办的一项高中生计算机科学与编程的竞赛。复赛CSP-J竞赛的第二个阶段,参赛者需要通过初赛选拔才能进入复赛CSP-J复赛历年试题pdf中包含了以往CSP-J复赛的试题和答案。这些试题主要涵盖了计算机科学与编程的各个方面,包括编程语言算法数据结构、计算机网络等。参赛者可以通过研究历年试题,了解CSP-J竞赛的题型和出题风格,提高自己的解题能力和编程水平。 CSP-J复赛历年试题pdf对于参赛者来说具有很大的参考价值。通过研究这些试题,参赛者可以了解到高水平的计算机科学与编程问题是如何被设计和解决的。同时,参赛者还可以通过尝试解答这些试题,检验自己的知识和技能,发现自己的不足之处并进行改进。 此外,CSP-J复赛历年试题pdf还对教师和学生进行教学和学习有很大的帮助。教师可以利用这些试题作为教学资源,丰富教学内容和方法,提高学生的计算机科学与编程能力。学生可以通过研究这些试题,扩展知识面,提升解决问题和编程的能力。 总之,CSP-J复赛历年试题pdf是一份重要的学习和竞赛资料,对参赛者、教师和学生都具有很大的参考和帮助作用。通过研究这些试题,大家可以更好地了解计算机科学与编程的相关知识和技能,并提升自己的竞赛和学习能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值