一.数字游戏
题目参考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)的难度其实是都在增加的,因为涌入的人多了,有能力的人也就多了,然后题目自然而然的就难了,对国家来说是好消息,对我们来说也算是好消息,多学一点就能多突出一点!