首页 > 其他分享 >CCF-CSP认证202403个人总结以及部分代码

CCF-CSP认证202403个人总结以及部分代码

时间:2024-04-06 15:55:23浏览次数:27  
标签:include int MAX long 202403 str wat CCF CSP

第一次参加,总分340,这个成绩个人觉得比较满意了,毕竟考前一直在划水,也很久没写算法题了。写到第四题,觉得还剩一个小时肯定写不完就又开始划水,暴力模拟完了就开始翻网页抄自己的提交记录,无所事事,想提前交卷。考试结束在网上一搜,第四题好像不是很难,瞬间觉得没写到最后亏了,开始后悔。

考前做了CSP题库最近三次的前两题熟悉题型,但是个人感觉对我自己来说做多了好像也没有很大用处,除非考试做到后两题,没想到真给我做到了(?)。

很久没碰过C++了,STL可以说是非常陌生,迭代器翻书找半天,set交集并集考试的时候翻书才知道直接有现成的可以用(拿的C++PrimerPlus第六版,不愧是这么厚一本,还是有用的)。前三题都是一遍过,出乎意料,意外的顺利,就是可惜第三题时间耗得有点长。

记录一下提交(无所事事的时候对着电脑抄下来的):

提交序号 提交时间 题号 得分
109 13:40:45 1 100
1307 14:24:15 2 100
4693 16:32:54 3 100
5729 17:02:29 4 0(辅助输出没删)
5864 17:06:22 4 30(看数据大小感觉还能多混点)
6230 17:15:45 4 40
6264 17:16:20 4 40(觉得肯定写不完了,开始无所事事)

以下是部分根据本人记忆复现的代码,本人代码可能十分混乱,不是写的清楚明白的那一类,已经尽力修改过了,仅供参考。


202403-1


签到题。

#include<iostream>
using namespace std;
typedef long long ll;
const int MAX=1e2+5;
int n,m,article[MAX]={0},count[MAX]={0};

int main(){
	cin>>n>>m;//文章数 词种类数 
	for(int i=1;i<=n;i++){
		bool flag[MAX]={false};//一定要初始化 
		int l,z;
		cin>>l;//该文章的词数 
		for(int j=1;j<=l;j++){
			cin>>z;//第几个词 
			count[z]++;
			if(!flag[z]){
				flag[z]=true;//本文章中该词已被计算过 
				article[z]++;
			}
		}
	}
	for(int i=1;i<=m;i++){
		cout<<article[i]<<" "<<count[i]<<endl;
	}
	return 0;
}

202403-2


并集直接使用的STL的函数,其实交集也有,只不过我当时已经写完了才看到书上有,因为已经AC了就没改。

#include<iostream>
#include<string>
#include<set>
#include<algorithm>
using namespace std;
typedef long long ll;
const int MAX=1e4+5;
int n,m;
set<string> se1,se2;

string change(string s){//全转换成小写
	for(int i=0;i<s.length();i++){
		if(s[i]>='A'&&s[i]<='Z'){
			s[i]=s[i]-'A'+'a';
		}
	}
	return s;
}

int main(){
	cin>>n>>m;
	string str;
	for(int i=1;i<=n;i++){
		cin>>str;
		str=change(str);
		se1.insert(str);
	}
	for(int i=1;i<=m;i++){
		cin>>str;
		str=change(str);
		se2.insert(str);
	}
	//交集
	set<string> se_j;
	set<string>::iterator it1=se1.begin();
	for(;it1!=se1.end;it1++){
		set<string>::iterator it2=se2.begin();
		for(;it2!=se2.end();it2++){
			if(*it1==*it2){
				se_j.insert(*it);
			}
		}
	} 
	cout<<se_j.size()<<endl;
	//并集
	set<string> se_u;
	set_union(se1.begin(),se1.end(),se2.begin(),se2.end(),insert_iterator<set<string> >(se_u,se_u.begin()));
	cout<<se_u.size()<<endl;
	return 0;
}


202403-3


大模拟,我没有高斯消元的板子,之前也没写过高斯消元的题,只能跟着提示写。

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;
typedef long long ll;
const int MAX=40+5;
int n,m;
double ans[MAX][MAX]={{0}};
vector<string> ve;//记录该元素是第几行 

void gs(double a[MAX][MAX],int x,int xe,int y,int ye){
	if(x>=xe||y>=ye){
		for(int i=0;i<ve.size();i++){
			for(int j=0;j<m;j++){
				ans[i][j]=a[i][j];
			}
		}
		return;
	}
	bool flag=false;
	for(int i=x;i<xe;i++){//考察矩阵第一列上的元素 
		if(a[i][y]){
			flag=true;//不全为0 
			break;
		}
	}
	if(!flag){
		gs(a,x,xe,y+1,ye);//全为0,对除去该列的子矩阵重复上述判断 
		return;
	}
	if(!a[x][y]){//交换行,让第一行第一个元素非零 
		int index=x+1;
		bool flag2=false;
		while(index<xe){
			if(a[index][y]!=0){
				flag2=true;
			}
		}
		if(flag2){//找到非0行 
			for(int i=y;i<ye;i++){//交换该行 
				double tmp=a[index][i];
				a[index][i]=a[x][i];
				a[x][i]=tmp;
			}
			double div=a[x][y];
			for(int j=y+1;j<ye;j++){//该行第一列元素化为1,便于计算 
				a[x][j]/=div;
			}
		}
	}
	for(int i=x+1;i<xe;i++){//遍历每行 
		double mul=(a[i][y]/a[x][y])*(-1);//减的倍数
		for(int j=y;j<ye;j++){
			a[i][j]+=a[x][j]*mul;
		} 
	}
	gs(a,x+1,xe,y+1,ye);
	return;
}

int count(double a[MAX][MAX],int x,int xe,int y,int ye){
	int cnt=0;
	for(int i=x;i<xe;i++){
		bool flag3=false;
		for(int j=y;j<ye;j++){
			if(a[i][j])flag3=true;//非0 
		}
		cnt+=flag3;
	}
	return cnt;
}

int main(){
	cin>>n;
	for(int i=1;i<=n;i++){
		ve.erase(ve.begin(),ve.end());
		double ys[MAX][MAX]={{0}};
		cin>>m;
		string str;
		for(int j=0;i<m;j++){//列 元素是行 
			cin>>str;
			int boundary=0;//左边界 
			for(int k=0;k<str.length();k++){
				if(str[k]>='0'&&str[k]<='9'&&(k+1==str.length())||(str[k+1]<'0'||str[k+1]>'9')){//一组元素带数量 
					string ss;//substring记录该元素 
					int num=0;
					for(int l=boundary;l<=k;l++){
						if(str[l]>='0'&&str[l]<='9'){
							num=num*10+str[l]-'0';
						}
						else{
							ss+=str[l];
						}
					}
					if(find(ve.begin(),ve.end(),sss)==ve.end()) ve.push_back(ss);//目前没有该元素,加入 
					for(int p=0;p<ve.size();p++){
						if(ve[p]==ss){
							ys[p][j]=num;
						}
					}
					boundary=k+1;//更新左边界 
				}
			}
		}
		gs(ys,0,ve.size(),0,m);//数组 行开始 行结束 列开始 列结束
		int ansnum=count(ans,0,ve.size(),0,m);
		if(ansnum<m){
			cout<<"Y"<<endl;
		}
		else{
			cout<<"N"<<endl;
		} 
	}
	return 0;
}

202403-4


暴力混分

//可以使用链表存储,链表加暴力听说可以AC
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int MAX=3e5+5;
int c,m,n;
int wat[MAX]={0};

void pd(){
	bool flag=false;
	for(int i=1;i<=c;i++){
		if(wat[i]>4){//需要操作 
			flag=true;//进行操作
			wat[i]=0;
			int lll=i-1,rrr=i+1;
			while(lll>=1){//向左,从左开始遍历 
				if(wat[lll]){
					wat[lll]++;
					break;
				}
				lll-=1;
			}
			while(rrr>=1){//向右 
				if(wat[rrr]){
					wat[rrr]++;
					break;
				}
				rrr+=1;
			}
			break;
		}
	}
	if(flag)pd();
	return;
}

int main(){
	cin>>c>>m>>n;//网格宽度 有水的格子 操作次数 
	for(int i=1;i<=m;i++){
		int x,w;
		cin>>x>>w;
		wat[x]=w;
	}
	for(int i=1;i<=n;i++){
		int p;
		cin>>p;
		wat[p]++;//p格子的水加一 
		pd();
		int cnt=0;
		for(int i=1;i<=c;i++){
			if(wat[i])cnt++;
		}
		cout<<cnt<<endl;
	}
	return 0;
}

标签:include,int,MAX,long,202403,str,wat,CCF,CSP
From: https://www.cnblogs.com/sK07XdAy/p/18107996

相关文章

  • 【题单】 往届 CSP/s 题目(洛谷)
    这里写目录标题updata20232022202120202019updata2023P9752[CSP-S2023]密码锁P9753[CSP-S2023]消消乐P9754[CSP-S2023]结构体P9755[CSP-S2023]种树2022P8817[CSP-S2022]假期计划P8818[CSP-S2022]策略游戏P8819[CSP-S2022]星战P8820[......
  • 2022CSP-J组真题 2.解密
    线上OJ:https://www.luogu.com.cn/problem/P8814核心思想:对本题先进行数学公式推导已知ed=(......
  • CCF CSP模拟真题解答示例
    CCFCSP(CertifiedSoftwareProfessional)是中国计算机学会主办的软件能力认证考试,旨在评估参赛者在计算机科学和软件工程方面的基本知识和实践能力。请注意,以下解答仅作为示例,并非针对实际真题的准确答案。实际考试中的题目和答案可能会有所不同,因此建议参考官方发布的真题......
  • 20240318-20240331
    延迟了两周,这两周属实什么也没干。工作上的事情出了点岔子,副业也就勉强开了个头。这两个周末,一个周末自驾去了南昌,一个周末自驾回了趟家。属于一睁眼都在路上,一闭眼都在床上。工作上的事情虽说要努力完成,但是还是有点力不从心。这段时间关于人生、职业还是想了很多,但是终究是时......
  • 20240331_搜索练习
    目录P3206DungeonMasterP3207LakeCountingP3208TheCastleP896仙岛求药P429【基础】走迷宫P2465迷宫问题P952【入门】算24点P3206DungeonMaster这题是一个三维迷宫,其中用‘.’表示空地,‘#’表示障碍物,‘S’表示起点,‘E’表示终点,求从起点到终点的最小移动次......
  • CCF-CSP真题《202309-3 梯度求解》题解
    题目string转longlong忘记处理负数卡了半天,服了#include<iostream>#include<cstdio>#include<cstring>#include<sstream>typedeflonglongll;usingnamespacestd;intn,m,temp;lla[302];stringf,x,b;llmod=1e9+7;structnode{ stringcon; n......
  • 20240330打卡-01构建之法阅读笔记之一
    软件=程序+软件工程。所有的算法在我学习之前就已经实现了,那么我有必要学习算法与数据结构吗??如何做一个好的程序员,我以前以为就是根据要求将需求实现,但看了第一章概论,我发现这个要求实在是太低了,不是一个一本大学生所追求的目标,书上写到:1.研发出符合用户需求的软件2.通过一定的软......
  • 算法模板 v1.10.5.20240330
    算法模板v1.1.1.20240115:之前历史版本已不可寻,创建第一份算法模板。v1.2.1.20240116:删除“编译”-“手动开栈”;删除“编译”-“手动开O优化”;修改“编译”-“CF模板”;删除“读写”;删除“图论”-“欧拉图”-“混合图”;删除“图论”-“可达性统计”;删除“数据类型”-“高精类”。......
  • 20240330
    好像这次dxlx重庆只有我一个人来了?尬,根本没有认识的人,因为这个吃饭都不积极了,一个人吃饭有什么意思啊。。。还不如不吃。好好好,这就是cdqz的优良传统吗?讲两天的ds,第一天还是线段树平衡树,第二天直接把LCT整上来了。而且第一天的平衡树不是splay,是FHQTreap,也不知道讲LC......
  • 20240328
    续昨天。T8洛谷P4150最短路问题行数很小,考虑使用矩阵。对于一个区间\([l,r]\),维护\(ll_{i,j},rr_{i,j},lr_{i,j}\)分别表示\((i,l)\rightarrow(j,l)\)、\((i,r)\rightarrow(j,r)\)、\((i,l)\rightarrow(j,r)\)的最小代价。为了转移方便,再维护\(lm_{i......