CCF CSP认证——201312
文章目录
- 201312-1 出现次数最多的数
- 201312-2 ISBN号码
- 201312-3 最大的矩形
- 201312-4 有趣的数
- 201312-5 I’m stuck!
201312-1 出现次数最多的数
题目链接
数据量较小,且数据范围也比较小。可以直接暴力,通过设置数组记录下标数据出现的次数,最后遍历记录数组获取出现最多出现次数的数字。
#include<iostream>
using namespace std;int main(){//暴力 int n, flag[10001] = {0};scanf("%d", &n);for(int i = 0; i < n; i ++){int a;scanf("%d", &a);flag[a] ++;}int m = 0;for(int i = 1; i <= 10000; i ++)if(flag[m] < flag[i])m = i;printf("%d", m);return 0;
}
201312-2 ISBN号码
题目链接
简答题
挨个接受ISBN号码或者分四个数接收都可以。
#include<iostream>
#include<algorithm>
#include<stack>
using namespace std;int main(){//注意标识码为X(也就是10)的情况 int a[10], b = 0;char c;scanf("%1d-%1d%1d%1d-%1d%1d%1d%1d%1d-%c", &a[0], &a[1], &a[2], &a[3], &a[4], &a[5], &a[6], &a[7], &a[8], &c);for(int i = 0; i < 9; i ++)b += a[i] * (i + 1);b %= 11;if(b == (c == 'X' ? 10 : c - '0'))printf("Right");elseprintf("%1d-%1d%1d%1d-%1d%1d%1d%1d%1d-%c", a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], b == 10 ? 'X' : b + '0');return 0;
}
201312-3 最大的矩形
题目链接
①
数据量较少,可以直接暴力求解。
时间复杂度:O(n2)
#include<iostream>
#include<algorithm>
#include<stack>
using namespace std;int main(){//暴力 int n, a[1000], m = 0;scanf("%d", &n);for(int i = 0; i < n; i ++)scanf("%d", &a[i]) ;for(int i = 0; i < n; i ++){int t = a[i];for(int j = i; j < n; j ++){t = min(t, a[j]);m = max(m, (j - i + 1) * t);}}printf("%d", m);return 0;
}
②
单调栈(递增)
通过单调递增栈实现
#include<iostream>
#include<algorithm>
#include<stack>
using namespace std;int main(){//单调栈(递增)int n, a[1000], m = 0;scanf("%d", &n);for(int i = 0; i < n; i ++)scanf("%d", &a[i]) ;a[n] = 0;stack<int> s;for(int i = 0; i <= n; i ++){if(s.empty() || a[s.top()] <= a[i])s.push(i);else{int t = 0;while(!s.empty() && a[s.top()] > a[i]){t = s.top();s.pop();m = max(m, (i - t) * a[t]);//i - t指的是当前矩阵的宽度,a[t]是当前高度//实现单调递增栈} s.push(t);a[t] = a[i];}}printf("%d", m);return 0;
}
关键应该是下述两行代码难以理解
s.push(t);
a[t] = a[i];
为什么要将最后出栈的位置再次入栈呢?因为构建的是递增栈所以前面栈的那些高度也是可以达到当前的高度要求的,所以将最后出栈的位置入栈就可以将前面的面积留存,不至于出现面积损失。如下所示。
③
单调栈
#include<iostream>
#include<algorithm>
#include<stack>
using namespace std;int main(){//单调栈 int n, a[1000], m = 0;scanf("%d", &n);for(int i = 0; i < n; i ++)scanf("%d", &a[i]) ;a[n] = 0;stack<int> s;for(int i = 0; i <= n; i ++){if(s.empty() || a[s.top()] < a[i])s.push(i);else{int t = s.top();s.pop();int area = a[t] * (s.empty() ? i : i - s.top() - 1);m = max(m, area);-- i;//不移动i,后面还有有个 i++ }}printf("%d", m);return 0;
}
201312-4 有趣的数
题目链接
动态规划
第n位所放置的数一定与前n-1位放置的数有关(6种情况)
前i位处于该状态个数 状态(全为) 前i+1位处于该状态个数
状态 | 数字 | 转移方程 | 情况分析 |
---|---|---|---|
a | 2 | 1 | 如果前i+1位为2,则前i位一定为2 |
b | 2,0 | b*2+a |
如果前i+1位为2,0,则 前i位全为2,第i+1位为0 前i位为2,0混合串,第i+1位为2或0 |
c | 2,3 | c+a |
如果前i+1位为2,3,则 前i位全为2,第i+1位为3 前i位为2,3混合串,第i+1位为3 |
d | 2,0,1 | d*2+b |
如果前i+1位为2,0,1,则 前i位为2,0,第i+1位为1 前i位为2,0,1,第i+1位为2或1 |
e | 2,0,3 | e*2+c+b |
如果前i+1位为2,0,3,则 前i位为2,0,第i+1位为3 前i位为2,3,第i+1位为0 前i位为2,0,3,第i+1位为0或3 |
f | 2,0,3,1 | f*2+e+d |
如果前i+1位为2,0,3,1,则 前i位为2,0,1,第i+1位为3 前i位为2,0,3第i+1位为1 前i位为2,0,3,1第i+1位为1或3 |
#include<iostream>
using namespace std;long long a, b, c, d, e, f; int main(){//第n位所放置的数一定与前n-1位放置的数有关(6种情况) /*前i位处于该状态个数 状态(全为) 前i+1位处于该状态个数*/a = 1;b = c = d = e = f = 0;int n;scanf("%d", &n);for(int i = 1; i < n; i ++){long long xb = b * 2 + a;long long xc = c + a;long long xd = d * 2 + b;long long xe = e * 2 + b + c;long long xf = f * 2 + d + e;b = xb % 1000000007LL;c = xc % 1000000007LL;d = xd % 1000000007LL;e = xe % 1000000007LL;f = xf % 1000000007LL;}printf("%lld", f);return 0;
}
201312-5 I’m stuck!
题目链接
dfs深度优先搜索(暴力)
通过dfs将所有S可以到达的点都标记上
同通过dfs将S不能达到的点都试一下是否可以到达T,不可以到达则数量+1
#include<iostream>
#include<vector>
#include<cstring>
using namespace std;int n, m;//地图行列数
bool flag[50][50], flag1[50][50];//flag1存储S可以到达的点,true为可以到达的点,false为不可以到达的点
int d[][2] = {-1, 0, 1, 0, 0, -1, 0, 1};//移动方向
vector<string> map;//存储地图
int si, sj, ti, tj;//存储S和T的位置void dfs(int x, int y){//深度优先搜索int xx, yy;flag[x][y] = 1;//标记该点已到达if(map[x][y] == '+' || map[x][y] == 'S' || map[x][y] == 'T'){//可以上下左右移动的点for(int i = 0; i < 4; i ++){xx = x + d[i][0];yy = y + d[i][1];if(xx >= 0 && xx < n && yy >= 0 && yy < m && !flag[xx][yy] && map[xx][yy] != '#')//可以走的点dfs(xx, yy);}}else if(map[x][y] == '-'){//可以左右移动的点for(int i = 2; i < 4; i ++){xx = x + d[i][0];yy = y + d[i][1];if(xx >= 0 && xx < n && yy >= 0 && yy < m && !flag[xx][yy] && map[xx][yy] != '#')dfs(xx, yy);}}else if(map[x][y] == '|'){//可以上下移动的点for(int i = 0; i < 2; i ++){xx = x + d[i][0];yy = y + d[i][1];if(xx >= 0 && xx < n && yy >= 0 && yy < m && !flag[xx][yy] && map[xx][yy] != '#')dfs(xx, yy);}}else if(map[x][y] == '.'){//只能向下移动xx = x + d[1][0];yy = y + d[1][1];if(xx >= 0 && xx < n && yy >= 0 && yy < m && !flag[xx][yy] && map[xx][yy] != '#')dfs(xx, yy);}
}int main(){//暴力 scanf("%d %d", &n, &m);for(int i = 0; i < n; i ++){string s;cin >> s;map.push_back(s);}for(int i = 0; i < n; i ++)for(int j = 0; j < m; j ++)if(map[i][j] == 'S')si = i, sj = j;else if(map[i][j] == 'T')ti = i, tj = j;dfs(si, sj);memcpy(flag1, flag, sizeof(flag));if(flag[ti][tj]){int cnt = 0;for(int i = 0; i < n; i ++)for(int j = 0; j < m; j ++){if(flag1[i][j]){memset(flag, 0, sizeof(flag));dfs(i, j);if(!flag[ti][tj])cnt ++;}}printf("%d", cnt);}elseprintf("I'm stuck!");return 0;
}
CCF CSP认证——201312相关推荐
- 以CCF CSP认证为抓手,积极探索软件基础能力递进式培养体系
原文链接:以CCF CSP认证为抓手,积极探索软件基础能力递进式培养体系 发布单位:学会 发布时间:2017-01-20 16:16 作者:陆建峰 余立功 摘要:为提升计算机专业类学生 ...
- 参加CCF CSP认证者须知
发布单位:中国计算机学会 发布时间:2014-11-11 15:06 凡有意参加CCF CSP认证者,请在cspro.org网站上注册.报名.缴费.打印准考证,参加认证后可以在网站查询 ...
- CCF CSP认证考试在线评测系统
关于CCF CSP认证考试在线评测系统 CCF CSP认证考试简介 CCF是中国计算机学会的简称.CCF计算机软件能力认证(简称CCF CSP认证考试)是CCF于2014年推出,是CCF计算机职业资格 ...
- 计算机考csp200分啥水平,计算机与信息工程学院成功举办第20次CCF CSP认证考试
2020年9月13日,计算机与信息工程学院在计算机大楼201举办第二十次CCF CSP认证考试.这是计算机与信息工程学院2019年12月与中国计算机学会签署协议.河南大学正式成为CSP认证考点以来,举 ...
- 北航ccf计算机软件能证排名前18%,CCF成功举办第十一次CCF CSP认证
第十一次CCF CSP计算机软件能力认证(CSP)于2017年9月17日在全国66所院校举办,这是2017年度CCF举办的第二次认证,来自全国200多个单位的6591人参加了本次认证.通过对本次CSP ...
- CCF —— CSP认证
1.认证知识要求: 考试内容主要覆盖大学计算机专业所学习的程序设计.数据结构以及算法,以及相关的数学基础知识.包括但不限于: (1)程序设计基础 逻辑与数学运算,分支循环,过程调用(递归),字符串操作 ...
- python认证考试_Python入门习题(39)——CCF CSP认证考试真题:公共钥匙盒
CCF CSP认证考试真题:共钥匙盒 问题描述 试题编号:201709-2 试题名称:公共钥匙盒 时间限制:1.0s 内存限制:256.0MB 问题描述 有一个学校的老师共用N个教室,按照规定,所有的 ...
- CCF CSP认证菜鸟刷题日志
CCF CSP菜鸟刷题日志(c/c++) 本萌新写给自己看的,要是有大佬路过,请多多指教orz 立个flag:每日一更,至201903 9月15ccf csp,冲鸭! 今天(2019.8.18)起每天 ...
- ccf csp认证考试的历年题集汇总
1.CCF历年试题解答_按题序 2.CCF认证考试题解目录 3.CCF CSP入坑指南 4.ccf 认证历年试题解答 5.CCF认证历年真题 _无题意 6.CCF-CSP认证备考要点 6.CCF认证历 ...
最新文章
- centos7 更新源 安装ifconfig
- JAVA中rootpanel_Java JPanel.setFocusCycleRoot方法代码示例
- linux图形化应用程序快捷方式制作方法
- Linux网络编程——浅谈 TCP 三次握手和四次挥手
- 1032:大象喝水查
- shell 创建表 连接db2_大数据技术之SparkSQL(七)连接Hive数据库
- 表格长度_知道你的成绩单是怎么打印的吗?超长Excel表格1页打印,拯救A4纸
- 常见的新算法的标准测试函数(Ackely,Rastrigin,Griewangk,SumSquartes,Sphere,Quartic,Schwefel' Problem等)
- shell例题3-百度面试题
- 小米mix2s html,【小米MIX2s评测】2018需要加价买的旗舰 小米MIX 2S评测_小米 MIX 2s(6GB RAM/全网通)_手机评测-中关村在线...
- commons-pool2-2.3 jar包_Maven项目中引入net.sf.json.JSONObject依赖jar包
- viper4android最新,蝰蛇音效viper4android rx-ViPER4Android FX开发版下载v2.6.0.2安卓正式版-西西软件下载...
- 一次电子罗盘+GPS智能转舵小车
- matlab发动机建模,基于MATLAB/SIMULINK的航空发动机建模与仿真研究
- [论文笔记] 视频广告理解的多模态框架
- 64位CPU,64位操作系统,和64位应用程序三者之间的关系
- 平面设计的福音,速看!
- 深圳市胡杨合一科技有限公司严重诈骗消费者
- 北京积分落户纳税入库时间余额已不足
- c++ 使用递归求解回文序列问题