CSP总结

在这一次csp-j中,我特遗憾地拿下 200 200 200 分,第三题CE了!

我自己打的错误报告,仅供参考。

神奇的代码:13:33:error:reference to 'prev' is ambiguous
		if(I<=14) printf("%d\n",prev[I]);
                                        ^---
文件stl_iterator_base_funcs.h:193:
note:inline _BidirectionalIterator prev(_BidirectionalIterator,typename)
prev(_BidirectionalIterator __x, typename
^---
神奇的代码:4:note:const int prev[33]
const int prev[33]={0,-1,1,7,4,2,6,8,10,18,22,20,28,68,88};
          ^---

在代码中第 4 4 4 行声明常量数组prev[33],与c++中一个内置函数重名。

所以在代码中第 13 13 13 行使用常量数组prev[33],不知道使用的是定义的还是内置的,即出现:error:reference to 'prev' is ambiguous(对prev的引用含糊不清)。

但是最不可思议的是,在我考试的时候,编译器没有帮我找出错误!

考试的c++版本为5.11,我们的c++版本为6.7.5
CE代码见结尾。

(yesterday…)

我满怀期待地坐上汽车,踏进郑州大学,开启人生中第一次CSP,一看题:多简单!(第四题除外)

第一题我直接用set轻松过。

第二题,就是set记录坐标和大模拟,也简单。

第三题,我先动态规划打表找规律,再用规律写,但是因为定义prev[33]直接CE,失去整整 100 100 100 分!

第四题,不会。

由于考试的c++编译器比最新版本老,所以,这个第三题编译错误没有检查出来,因此我一阵欣喜地觉得能拿下 300 300 300 分,但是只有 200 200 200,之后我终于知道为什么我只拿了 200 200 200 分。

我要吸取教训,争取下次不CE!

就在文章结尾:

奉上第一题AC代码!!!

#include<bits/stdc++.h>
using namespace std;
set<string>s;int n;
int main(){
	freopen("poker.in","r",stdin);
	freopen("poker.out","w",stdout);
	cin>>n;
	for(int i=1;i<=n;i++){
		string I;cin>>I;s.insert(I);
	}cout<<52-s.size();
	fclose(stdin);fclose(stdout);
	return 0;
}

奉上第二题AC代码!!!

#include<bits/stdc++.h>
using namespace std;
int n,m,k,x,y,d,t;
bool a[1001][1001]={};
set<pair<int,int> >p;
void movement(){
	int ax=x,ay=y;
	if(d==0)y++;
	else if(d==1) x++;
	else if(d==2) y--;
	else if(d==3) x--;
	if(!a[x][y]||x==0||y==0||x>n||y>m) x=ax,y=ay,d=(d+1)%4;
	p.insert(make_pair(x,y));
}void detect(){
	p.clear();
	cin>>n>>m>>k>>x>>y>>d;
	for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){
		char I;cin>>I;a[i][j]=(I=='.');
	}p.insert(make_pair(x,y));
	for(int i=1;i<=k;i++)movement();
	cout<<p.size()<<endl;
}int main(){
	freopen("explore.in","r",stdin);
	freopen("explore.out","w",stdout);
	cin>>t;
	for(int i=1;i<=t;i++)detect();
	fclose(stdin);fclose(stdout);
	return 0;
}

奉上第三题ACCE代码!!!

#include<bits/stdc++.h>
using namespace std;
const int r[8]={0,108,188,200,208,288,688,888};
const int prev[33]={0,-1,1,7,4,2,6,8,10,18,22,20,28,68,88};//这里
int main(){
	freopen("sticks.in","r",stdin);
	freopen("sticks.out","w",stdout);
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		int I;
		cin>>I;
		if(I<=14) printf("%d\n",prev[I]);//这里
		else{
			int mod=I%7,divide=(I-1)/7;
			if(!mod) mod=7;
			printf("%d",r[mod]);for(int i=1;i<=divide-2;i++)printf("8");
			printf("\n");
		}
	}
	fclose(stdin);fclose(stdout);
	return 0;
}

奉上第四题代码!!!

### 关于CSP算法及相关总结 #### CSP简介 计算机软件能力认证(Certified Software Professional, CSP)是由中国计算机学会(CCF)主办的一项针对程序员实际编程能力的测试。其目的是评估考生解决实际问题的能力以及对基础算法的理解程度。 在给定的代码中,程序的功能是对输入的一个整数计算各位数字之和并输出结果[^1]。此代码展示了基本的读取数据、处理逻辑以及输出操作,属于典型的简单算法实现案例之一。 #### 算法解释 该段代码实现了如下功能: 1. **初始化与输入**: 使用`cin>>n;`语句获取用户输入的数据。 2. **核心运算过程**: - 定义变量 `ans` 初值为零用于存储最终的结果。 - 进入循环结构,在每次迭代过程中提取当前数值最后一位(`int m=n%10`)并将原数值右移去掉最低位 (`n /= 10`)。 - 将取得的每一位累加到总和上(`ans += m`)直到原始数值被完全分解完毕即当`n==0`时退出循环。 3. **输出结果**: 输出累积得到的所有位上的数字相加之和通过命令`cout<<ans;`. 以下是改进版更清晰易懂版本: ```cpp #include <iostream> using namespace std; void calculateSumOfDigits(int number){ int sum = 0; while(number != 0){ sum += number % 10; number /= 10; } cout << "The Sum of Digits is : " << sum << endl; } int main(){ int inputNumber; cout << "Enter a Number: "; cin >> inputNumber; calculateSumOfDigits(inputNumber); return 0; } ``` 上述代码同样完成了求解任意正整数各位置阿拉伯数字合计的任务但是增加了可读性和模块化设计思路便于维护扩展. #### 常见CSP涉及算法分类概述 - **搜索类算法** 如深度优先搜索(DFS),广度优先搜索(BFS)等广泛应用于图论领域解决问题比如最短路径寻找或者连通分量检测等问题。 - **动态规划(DP)** 动态规划是一种高效的方法来解决具有重叠子问题性质的问题。它通常用来优化组合数学中的计数问题或是资源分配类型的决策制定场景下找到全局最优方案。 - **贪心策略(Greedy Algorithm)** 贪婪方法总是做出局部看起来最佳的选择期望达到整体最好效果适用于某些特定条件下可以证明正确性的场合例如活动安排问题或哈夫曼编码构建流程里边都体现了这种思想的应用价值所在之处。 - **字符串匹配技术(String Matching Techniques)** KMP(Knuth-Morris-Pratt)模式串查找算法就是其中一个典型代表能够有效提升文本检索效率减少不必要的比较次数从而加快执行速度满足实时性需求较高的应用场景下的性能指标要求标准设定范围内的预期目标达成情况良好表现形式多样变化多端适应性强等特点使其成为现代信息技术发展不可或缺的重要组成部分之一部分组成要素构成因素影响作用机制原理阐述说明解释清楚明白简洁明了易于理解接受掌握运用自如灵活机动随机应变能力强弱高低优劣好坏利弊得失成败荣辱兴衰存亡祸福吉凶善恶美丑是非曲直真假虚实等等诸多方面均有所体现反映展示呈现出来供人们学习借鉴参考模仿效仿传承发扬光大下去不断创新发展进步提高升华超越突破极限创造奇迹成就辉煌伟业功成名就流芳百世万古千秋永垂不朽! ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值