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

一.数字游戏

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

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

1、头文件写错。

2、freopen忘记去掉注释了。

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

4、freopen打错。

5、题目不会做。

不废话了,上代码了

#include<iostream>
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<<cnt;
	return 0;
}

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

 

第二题、公交换乘

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

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

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

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

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

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

 

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

#include<bits/stdc++.h>
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<n; i++) {
		cin>>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:"<<a.p<<" "<<endl;
			t++;
		} else {
			k=-1;
			for(int j=t-1; j>=0; j--) {
				if(a.t-arr[j].t>45) break;
				if(arr[j].p>=a.p&&arr[j].b==0) {
					k=j;
//					cout<<"免单:"<<a.p<<endl;
				}	
			}
			if(k!=-1){
				arr[k].b=1;	
			}
			else {
				sum+=a.p;
			}
		}
	}
//	cout<<endl;
	cout<<sum<<endl;
	return 0;
}

第三题、纪念品

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

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

#include<bits/stdc++.h>
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<<m<<endl;
	else{
		for(int i=2;i<=t;i++){
			memset(f,0,sizeof(f));
			for(int j=1;j<=n;j++){
				for(int k=a[i-1][j];k<=m;k++){
					f[k]=max(f[k],f[k-a[i-1][j]]+a[i][j]-a[i-1][j]);//就是看看花掉的话 划不划算	
				}
			}
			m+=f[m];
		}
		cout<<m<<endl; 
	}
	return 0;
}

第四题、加工零件

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

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

 

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

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值