CSP-X复赛模拟六补题报告

                           CSP-X复赛模拟六补题报告
                                 时间:2023年10月19日
                                         S12004 张伯钧

一、分数:
        总分:60’
        T1【函数】:50’
        T2【一对】:100’
        T3【蚁巢】:100’
        T4【丰收】:100’

二、比赛过程:

第一题:

        这道题很简单,果不其然,得了50分

第二题:

        这道题并不是很难,果不其然,得了100分

第三题:

        这道题很难,果不其然,得了100分(找了一个小时的规律,终于找到了)

第四题:

        这道题很简单,果不其然,得了100分(老师自己出了几组样例,找找规律,就对了)

三、比赛分析:

第一题:

函数

时间限制:1秒        内存限制:256M

题目描述

小明今天刚从数学课上学了什么是函数,听说小红在可达鸭学K3的时候也给他提到过函数这个名词,但是当时他不太清楚,现在他已经完全明白了,函数就是一个含有未知数的方程,带入任意范围内的未知数,然后计算得到答案。

小明的家庭作业:就是算下面这个方程是9的时候的函数值,他算的是1386,想找小红验证一下是否正确,请你帮小红写一个程序吧~

已知,f(x)=2x^3-2x^2+90

给定一个整数n,请你计算并输出f(n)的值。

共有TT组数据。

输入格式

第一行,一个整数T,表示共有T组测试数据。

接下来T行,每行一个整数n。

输出格式

共T行,每行一个整数,表示f(n)的值。

输入样例

2
9
77

输出样例

1386
901298

数据范围

50%,1<=T<=10^4,1<=n<=10^2

100%,1<=T<=10^6,1<=n<=10^5

思路:

        输出f(x)=2x^3-2x^2+90

代码实现:

#include<iomanip>
#include<iostream>
#include<cmath>
#include<string>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<vector>
#include<stack>
#include<map>
#include<queue>
#define ll long long
using namespace std;
ll f(ll n){
	return 2*(n*n*n)-2*(n*n)+90;
}
int main(){
//	freopen("function.in","r",stdin);
//	freopen("function.out","w",stdout);
	int t,n;
	scanf("%d",&t);
	while(t--){
		scanf("%d",&n);
		printf("%lld\n",f(n));
	}
//	fclose(stdin);
//	fclose(stdout); 
	return 0;
}

第二题:

一对

时间限制:1秒        内存限制:256M

题目描述

小可突发奇想在 1 到 n 的大小以内,随便找一个整数a,可能存在另一个数b,使得a+b=n。他想和最好的朋友达达一起玩这个游戏。于是小可负责找较小的整数a,达达负责找较大的整数b,而且他们找的数不能相同哦!

遇到较大的数,他们能算一整天呢!请你帮忙写一个程序,计算一下 1 到 n 以内,有多少对(a,b)符合要求。

输入格式

第一行包含,一个整数T,表示共有T组测试数据。

接下来T行,每行一个整数n。

输出格式

共TT行,每行一个整数,表示 1 到 n 以内,有多少对(a,b)符合要求。

输入样例

6
7
1
2
3
2000000000
763243547

输出样例

3
0
0
1
999999999
381621773

数据范围

30%,1<=T<=10,1<=n<=10^3

100%,1<=T<=10^4,1<=n<=10^9

思路:

        通过多组样例的测试,会发现有(n-1)/2对符合要求的(a,b)

代码实现:

#include<iomanip>
#include<iostream>
#include<cmath>
#include<string>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<vector>
#include<stack>
#include<map>
#include<queue>
#define ll long long
using namespace std;
ll n;
int main(){
//	freopen("pair.in","r",stdin);
//	freopen("pair.out","w",stdout);
	int t;
	cin>>t;
	while(t--){
		scanf("%lld",&n);
		printf("%lld\n",(n-1)/2);
	}
//	fclose(stdin);
//	fclose(stdout); 
	return 0;
}

第三题:

蚁巢

时间限制:1秒        内存限制:128M

题目描述

小可很喜欢蚂蚁,于是在保证安全的前提下,小可找到了一个蚁巢进行观察记录。

小可对于每一只蚂蚁都用一个正整数进行编号。编号为xx的蚂蚁进入蚁巢,那么小可就记录一个数字xx;如果出蚁巢,那么小可记录一个数字−x。

小可记录了每个时刻蚂蚁的进出活动,但是回家后小可发现自己记录的很没规律,也就是说是乱序的!小可想知道,在第i时刻,蚁巢里最多有多少只蚂蚁,以及最少有多少只蚂蚁。最开始的时候蚁巢可以看作是空的。

注意:一只蚂蚁不会反复进出蚁巢。换句话说,一只蚂蚁最多进入蚁巢一次,离开蚁巢一次。

输入描述

第一行一个数字n,表示小可记录了n个时刻。

接下来一行n个数a​1​​,a​2​​,⋯,a​n​​,表示每个时刻小可记录的数字。如果a​i​​>0,表示编号为a_ia​i​​的蚂蚁,在某个时刻进入蚁巢;如果a​i​​<0,表示编号为a​i​​的蚂蚁,在某个时刻离开蚁巢。蚂蚁只有进入了蚁巢才能离开蚁巢,数据保证出入情况合法。注意,这个序列是乱序的。

输出描述

两行,每行n个整数。

第一行第ii个数表示第ii时刻,蚁巢内蚂蚁数量的最大值。

第二行第ii个数表示第ii时刻,蚁巢内蚂蚁数量的最小值。

样例输入1

3
1 2 -2

样例输出1

1 2 1
1 0 1

样例输入2

6
4 3 -1 2 1 -2

样例输出2

1 2 3 4 3 2
1 0 1 0 1 2

数据范围

对于20%的数据,n≤10
另外有20%的数据,a​i​​>0;
还有20%的数据,∑​​n         ​​a​i​​=0;                                                                                                                                      i=1
对于100%的数据,n≤1000,1≤∣a​i​​∣≤n。

思路:

        统计正数和负数的数量,遍历输出正数数量个i,剩下输出i-c(c++)

        然后第二行输出负数数量个“1 0 ”最后输出c(c++)

代码实现:

#include<iomanip>
#include<iostream>
#include<cmath>
#include<string>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<vector>
#include<stack>
#include<map>
#include<queue>
#define ll long long
using namespace std;
int main(){
//	freopen("nest.in","r",stdin);
//	freopen("nest.out","w",stdout);
	int n,x,A=0,B=0;
	cin>>n;
	for(int i=1;i<=n;i++){
		cin>>x;
		if(x>0){
			A++;
		}
		if(x<0){
			B++;
		}
	}
	int c=0;
	for(int i=1;i<=n;i++){
		if(i<=A){
			cout<<i<<" ";
		}
		else{
			c++;
			cout<<A-c<<" ";
		}
	}
	cout<<"\n";
	for(int i=1;i<=n;i++){
		if(i<=2*B&&i%2*B==0){
			cout<<"0 ";
		}
		else if(i<=2*B&&i%2*B!=0){
			cout<<"1 ";
		}
		else if(i>2*B){
			cout<<i-2*B<<" ";
		}
	}
//	fclose(stdin);
//	fclose(stdout); 
	return 0;
}

第四题:

丰收

时间限制:1秒        内存限制:128M

题目描述

今年粮食大丰收!有一块肥沃的土地由两人共同耕种,于是如何分配变成了难题。

其中一个人想到了一个办法。有n格子,第i个格子上放了2​i​​粒小麦。每个人必须分到​2/​​n​​个格子,并且粮食数量的差的绝对值要尽可能地小。

请你给出一个合理的分配方案。

输入描述

一行一个整数n,代表格子的数量。

输出描述

输出两行整数,表示两个人分到的格子的编号。

分配到的粮食总数最多的方案放到第一行输出,另一个放到第二行输出。

每一行编号要按照从小到大的顺序输出。

样例输入

2

样例输出

2

1

数据范围

对于50%的数据,n≤26
对于100%的数据,1≤n≤10​^5​​,n是偶数。

思路:

        让最大的带上几个小的

代码实现:

#include<iomanip>
#include<iostream>
#include<cmath>
#include<string>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<vector>
#include<stack>
#include<map>
#include<queue>
#define ll long long
using namespace std;
int main(){
//	freopen("harvest.in","r",stdin);
//	freopen("harvest.out","w",stdout);
	int n;
	scanf("%d",&n);
	for(int i=1;i<n/2;i++){
		cout<<i<<" ";
	}
	cout<<n<<endl;
	for(int i=n/2;i<n;i++){
		cout<<i<<" ";
	}
//	fclose(stdin);
//	fclose(stdout); 
	return 0;
}

总结:

        第一道题就因为把long long写成了int只得了五十分,要不然就能全对了,剩下的题都是找规律。

  • 0
    点赞
  • 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、付费专栏及课程。

余额充值