2019 CSP(NOIP) 普及组复赛 部分题目解析

一.数字游戏

题目参考https://www.luogu.org/problem/P5660

正如大多数人说的,第一题就是一道签到题,只要学过字符串基本上都能做对,做不对的同学包含但不限于以下情况:

1、头文件写错。

2、freopen忘记去掉注释了。

3、freopen里面的文件名打错。

4、freopen打错。

5、题目不会做。

不废话了,上代码了

#include
using namespace std;
int main(){
	string s;
	int cnt=0;
	cin>>s;
	for(int i=0;i<8;i++){
		if(s[i]=='1') cnt++;
	}
	cout<

吐槽一句:长度都固定shi了,不能因为是第一年举办csp,就水到这份上啊。

 

第二题、公交换乘

题目参考https://www.luogu.org/problem/P5661

说一下这道题我犯的错吧,若我去考试的话就能得30分!!!

但是我没去,和哈哈哈哈哈哈哈哈哈。

不是思路错的问题,是时间爆掉了,RE了!

简单说一下我的思路,边输入边比较,地铁就直接把钱存入sum中,地铁的其他数据存入数组中,公交车就开始遍历我刚刚存入的数组,找到满足各种条件之后的数据(这也是我时间爆的一个原因),若能用优惠券则标识符改变。遍历结束,没有改变标识符的公交车就收钱(存入sum中)。

我后面的处理方式是逆序遍历,遇到超过45min的就break掉,时间上就OK了。

 

说一下为什么要写这个,是因为大佬们都用vector去做了,我觉得我们还有很多不会vector的小伙伴,可以参考我这个!

#include
using namespace std;
struct ck {
	int v,p,t,b;
};
ck arr[100050],a;
int main() {

	long long n,t=0,m=0,sum=0,k;
	cin>>n;
	for(int i=0; i>a.v>>a.p>>a.t;
		if(a.v==0) {
			arr[t].v=a.v;
			arr[t].p=a.p;
			arr[t].t=a.t;
			arr[t].b=0;
			sum+=a.p;
//			cout<<"p:"<=0; j--) {
				if(a.t-arr[j].t>45) break;
				if(arr[j].p>=a.p&&arr[j].b==0) {
					k=j;
//					cout<<"免单:"<

第三题、纪念品

题目参考https://www.luogu.org/problem/P5662

这道题是比较平稳的一道动态规划题,没有爆出来像去年那样的故事!以至于这道题很多大佬都懒的去写了。本文中的代码是参考https://mp.weixin.qq.com/s/ejhKZ6PjUmpBfmt8QsnJfA所写(主要是懒),供大家参考一下。

#include
using namespace std;
int a[105][1000];
int f[20000]={0};
int main(){
	int t,n,m;
	cin>>t>>n>>m;
	for(int i=1;i<=t;i++){
		for(int j=1;j<=n;j++){
			cin>>a[i][j];
		}
	} 
	if(t==1)
		cout<

第四题、加工零件

题目参考https://www.luogu.org/problem/P5663

我看到题目的时候第一反应是邻接矩阵加偶数取余,代码可以参考https://mp.weixin.qq.com/s/ejhKZ6PjUmpBfmt8QsnJfA所写,非vector版本的,我暂时没想出来,我后续再补充修改!

 

最后说一下,本次csp第一年考,中规中矩,对学生是一件好事,另外我们也看出来csp(noip)的难度其实是都在增加的,因为涌入的人多了,有能力的人也就多了,然后题目自然而然的就难了,对国家来说是好消息,对我们来说也算是好消息,多学一点就能多突出一点!

 

你可能感兴趣的:(2019 CSP(NOIP) 普及组复赛 部分题目解析)