ccf
阿钰呀~
这个作者很懒,什么都没留下…
展开
-
快速排序算法
快速排序时间复杂度排序算法有很多种,而快排基本上是比较常用的一种,相比于其他排序,其平均时间复杂度为O(nlogn),其最坏时间复杂度为O(n2)(此处表示n的平方),而最坏时间复杂度主要发生在程序有序且逆序排列的情况下。因此其默认时间复杂度通常认为是其平均时间复杂度。算法思想快速排序算法的思想主要就是选择一个元素,将不大于它的元素放在他的左边(或者右边),将不小于它的元素放在它的右边(左边),此处左右主要取决于要求的排序方式是升序还是降序,以下假设是进行升序排列。因此,使用一次快速排序以后必定有原创 2021-10-05 23:58:22 · 128 阅读 · 0 评论 -
CCF201409-1 相邻数对
代码如下:#include<iostream>#include<algorithm>#include<cmath>using namespace std;int main(){ int n,h=0; cin>>n; int a[n]; for(int i=0;i<n;i++) { cin>>a[i]; } sort(a+0,a+n); for(int i=0;i<n-1;i++) { if(abs(原创 2021-04-09 17:34:45 · 76 阅读 · 0 评论 -
CCF201712-1 最小差值
可以直接使用C++自带的排序来做代码:#include<iostream>//#include<stdlib.h>#include<algorithm>//使用C++中的快排要调用algorithm函数 //在排序的时候直接用sort(数组名+排序的第一个位置,数组名加排序的最后一个位置+1)即可 #include<cmath>using namespace std;int main(){ int n; cin>>n; in原创 2021-04-09 17:27:17 · 62 阅读 · 0 评论 -
CCF201803-1 跳一跳
这道题直接计算就行代码:#include<iostream>using namespace std;int main(){ int n,sum=0,s=0;//s表示上一次得分,sum表示总分 cin>>n; while(n!=0) { if(n==1)//表示没在中间 { sum+=1; s=1; } else { if(s==1||sum==0) { sum+=2; s=2; } els原创 2021-04-09 17:24:23 · 58 阅读 · 0 评论 -
CCF201812-1 小明上学
这道题直接写就行代码:#include<iostream>/*30 3 308 0 10 1 5 0 11 2 2 0 6 0 3 3 10 0 3*/using namespace std;int main(){ int r,y,g,n,k,t; cin>>r>>y>>g; cin>>n; int sum=0; for(int i=0;i<n;i++) { cin>>k>>t; s原创 2021-04-09 17:21:42 · 85 阅读 · 0 评论 -
CCF 201903-1 小中大
注意小数位数的保存就行,代码如下://中位数表示最中间的那位数,如果是偶数个数,则取两数的和。//我也不知道为什么呀,只有85分,还有三组数据没过 //找到原因,保留一位有效数字那没写,导致出现问题,现在已经满分了 #include<iostream>using namespace std;int main(){ int i,j,max,min,k=0; int n; float mid; cin>>n; cin>>min;//假设是升序 if原创 2021-04-09 17:17:44 · 87 阅读 · 0 评论 -
CCF 201909-1 小明种苹果
这个题应该不是很难,直接上代码:#include <iostream>using namespace std;int main(){ std::ios::sync_with_stdio(false);//为了加快cin cout 的效率 int N,M,a; int T=0,k,P=0; int q=0; cin>>N>>M; for(int i=0;i<N;i++) { q=0; for(int j=0;j<M+1;j+原创 2021-04-09 17:13:28 · 61 阅读 · 0 评论 -
CCF 202012-1 期末预测之安全指数
这道题直接处理就行#include<stdio.h>//#include<iostream> #include<iostream>using namespace std;int main(){ int i,k,score,weigh; int n; cin>>n; k=0; for(i=0;i<n;i++){ cin>>weigh>>score; k+=score*weigh; } if(k&l原创 2021-04-09 17:01:06 · 78 阅读 · 0 评论 -
CCF201803-2 碰撞的小球
碰撞的小球满分代码坑点一定要注意这里给出的所有小球所在的位置的顺序是无序的,所以任意两个序号不相邻的小球都可能发生碰撞。小球相撞或者到达两个端点小球的方向都需要发生改变,这里可以设置一个标志位来记录小球的方向,初试为1,当发生碰撞时就反向。解题思路这里因为任意两个不相邻的小球都可能发生碰撞,所以直接在读入的时候记录下小球所在位置,并设置一个标志位记录小球的编号,以及小球运动的方向。首先按位置为小球进行排序。在每一秒都检查一遍是否有小球与小球发生碰撞或者是小球和墙壁发生碰撞。发生碰撞时改原创 2021-04-09 15:14:28 · 75 阅读 · 0 评论 -
CCF201812-2 小明放学
分析CCF小明放学从40分到60分到100分的过程。这里我直接正常按顺序写的代码首先记录下红绿黄等经过一个轮回所需要的时间如果输入为0直接加在time 上不需要判断。如果输入为3表示目前在绿灯,并且还有t的时间绿灯结束,所以需要判断它前面所用的时间经过多个红绿灯轮回以后时间停在哪,如果仍处于绿灯区域就可以直接走,这里出现40分的问题如果时间超过了绿灯所剩倒计时,就需要判断:-如果它超出的时间还不到下一次绿灯到来的时间,就要加上还需要的能到绿灯时候的时间(这个自己画图很容易算出来)但是如果它超原创 2021-04-09 11:47:29 · 137 阅读 · 0 评论 -
CCF201903-2 二十四点
这个题使用栈来做的话可能会简单一点。原本符号和数字应该是需要放在两个栈的,但是注意实际上四则运算可以用AISC码来表示呀,也就是它可以转换为int型,自然也就可以存储在一个int型的栈中,所以这里直接使用一个栈就够了,第一遍先把乘法和除法算出来,接下来再算加法和减法。满分代码如下(应该很容易看清楚):#include<iostream>#include<stack>using namespace std;int main(){ int n; cin>>n;原创 2021-04-08 17:29:02 · 48 阅读 · 0 评论 -
CCF201909-2小明种苹果(续)
这道题实际也不是特别难,但是需要仔细,记录一下从30分到50分再到100分的过程。(这道题可能数据太大太多了,测试时间是真的有点长)首先记录从30到50分这里一定要加一个判断,否则如果一棵树统计了多次并且它的果实掉了多次的话,可能就会导致多算掉落果实的树的颗数if(flag[i]!=true) d++;//这里一定要避免重复啊加 从50到100分刚开始看到这个的时候我是真的老老实实的直接按他给的计算树重复的值来进行计算,也就是在读入数据的时候我就进行判断a[i-1],a[i],a[i+1](这原创 2021-04-08 16:07:13 · 88 阅读 · 0 评论 -
CCF 201912-2 回收站选址
以下代码满分通过首先说一下思路,这个题我直接使用暴力破解的方法,这里说了n的范围在10的三次方以内,然后我直接暴力搜索的时间复杂度为O(n2)也就是在10的六次方左右,应该是不会超时的,然后就直接把代码写出来测试了一下,满分拿下,时间没问题。这道题思路就是直接对每一个节点都对所有节点进行一次扫描,看其各个方向上是否有垃圾,如果是上下左右有就记录在flag里面,如果是对角线上有就记录在flag_four里面。代码如下:#include<iostream>using namespace s原创 2021-04-05 17:03:05 · 66 阅读 · 0 评论 -
C++实现CCF稀疏向量满分代码
不放题目了,就写一下测试用例:输入:10 3 44 57 -310 11 104 205 307 40输出:-20这道题其实不难,首先想到的方法就是直接使用map,因为map作为C++中的一个键值对,可以直接使用键值来访问value值。对于稀疏矩阵求内积其实只有在两个矩阵在同一个位置有值的时候结果才有值,否则只有一个有值那么在该位置所得乘积也是0,看公式:也就是在i位置必须u矩阵和v矩阵都不为0其加和才不为0,所以这里只需要用其中一个矩阵记录的值来进行循环,如果该矩阵i有值而在原创 2021-04-05 15:21:52 · 154 阅读 · 0 评论 -
CCF202006-1 线性分类器
CCF 线性分类器这道题我是真没想到,原来数据类型错了都可能一分没有,一直提及是0分(我把所有的数据类型都设置成了int型)然后我把int改成了long long int型就满分通过,我哭了啊。这道题直接使用最简单的方法,将所有的点读入以后,对所有的输入的线,直接带点进去,以第一个点为依据(它说了左右两边点的个数肯定都大于0),如果第k点与第1个点在同一边并且类型不同或者两个点不在同一边结果类型相同的话都直接输出No,否则判断完所有都满足条件的话就输出Yes就行。代码如下:(一定要注意数据类型呀)#原创 2021-04-05 14:44:38 · 126 阅读 · 0 评论 -
CCF 202009-2 风险人群筛查
这里就不放题目了。其实这道题主要就是内容多,但实际题目还是很简单的,就只需要一个判断是不是在该区域内,如果是就加两个标记位,一个用来记录经过该区域, 一个用来记录连续经过该区域的次数,当已经出现过在该区域逗留的情况了,后面的数据也就不需要再读入进去判断了,直接读了就行。代码如下#include<iostream>using namespace std;int main(){ int n,k,t,xl,yd,xr,yu; cin>>n>>k>>t&g原创 2021-04-04 15:24:39 · 108 阅读 · 0 评论 -
202009-1 称检测点查询
这个题不是特别难,直接上代码:#include<iostream>#include<cmath>#include<vector>using namespace std;int accumulate(int a,int b,int x ,int y){ return pow(a-x,2)+pow(b-y,2);} #define N 0x7fffffff//上面这个值是int型数据所能表示的最大值int main(){ int n; int x,y;原创 2021-04-03 23:03:17 · 58 阅读 · 0 评论 -
CCF202012-2 期末预测之最佳阈值满分代码
题目:链接:http://118.190.20.162/view.page?gpid=T122接下来说一下做这道题的过程,刚开始只有70分,然后改完以后变成60分,最后到80分,100分,这里的时间复杂度为O(nlogn)主要是用于排序然后说一下每一步没有拿满分的过程:对于这道题要算成预测正确的次数就应该包括小于该值时不及格的次数加上大于等于该值时成功的个数,为了使计算更加简洁,执行步骤如下在读入时记录下成功情况的总个数对所有数据按照从小到大进行排序在一次for循环中先看是否有两个值相同的数原创 2021-04-03 22:22:43 · 151 阅读 · 2 评论 -
CCF201412-2 Z字形扫描
在图像编码的算法中,需要将一个给定的方形矩阵进行Z字形扫描(Zigzag Scan)。给定一个n×n的矩阵,Z字形扫描的过程如下图所示:对于下面的4×4的矩阵, 1 5 3 9 3 7 5 6 9 4 6 4 7 3 1 3 对其进行Z字形扫描后得到长度为16的序列: 1 5 3 9 7 3 9 5 4 7 3 6 6 4 1 3 请实现一个Z字形扫描的程序,给定一个n×n的矩阵,输出对这个矩阵进行Z字形扫描的结果。输入格式 输入的第一行包含一个整数n,表示矩阵的大小。原创 2021-03-31 17:23:52 · 192 阅读 · 1 评论 -
ccf201409-3 字符串匹配
问题描述 给出一个字符串和多行文字,在这些文字中找到字符串出现的那些行。你的程序还需支持大小写敏感选项:当选项打开时,表示同一个字母的大写和小写看作不同的字符;当选项关闭时,表示同一个字母的大写和小写看作相同的字符。输入格式 输入的第一行包含一个字符串S,由大小写英文字母组成。 第二行包含一个数字,表示大小写敏感的选项,当数字为0时表示大小写不敏感,当数字为1时表示大小写敏感。 第三行包含一个整数n,表示给出的文字的行数。 接下来n行,每行包含一个字符串,字符串由大小写英文字母组成,不原创 2021-03-29 20:45:52 · 114 阅读 · 0 评论 -
CCF201409-2 试题名称: 画图
问题描述 在一个定义了直角坐标系的纸上,画一个(x1,y1)到(x2,y2)的矩形指将横坐标范围从x1到x2,纵坐标范围从y1到y2之间的区域涂上颜色。 下图给出了一个画了两个矩形的例子。第一个矩形是(1,1) 到(4, 4),用绿色和紫色表示。第二个矩形是(2, 3)到(6, 5),用蓝色和紫色表示。图中,一共有15个单位的面积被涂上颜色,其中紫色部分被涂了两次,但在计算面积时只计算一次。在实际的涂色过程中,所有的矩形都涂成统一的颜色,图中显示不同颜色仅为说明方便。给出所有要画的矩形,请问总共有原创 2021-03-29 19:54:15 · 65 阅读 · 0 评论 -
CCF 201403-3命令行选项
问题描述 请你写一个命令行分析程序,用以分析给定的命令行里包含哪些选项。每个命令行由若干个字符串组成,它们之间恰好由一个空格分隔。这些字符串中的第一个为该命令行工具的名字,由小写字母组成,你的程序不用对它进行处理。在工具名字之后可能会包含若干选项,然后可能会包含一 些不是选项的参数。 选项有两类:带参数的选项和不带参数的选项。一个合法的无参数选项的形式是一个减号后面跟单个小写字母,如"-a" 或"-b"。而带参数选项则由两个由空格分隔的字符串构成,前者的格式要求与无参数选项相同,后者则是该选项的参数原创 2021-03-29 11:24:25 · 62 阅读 · 0 评论 -
ccf201403-2 窗口
问题描述 在某图形操作系统中,有 N 个窗口,每个窗口都是一个两边与坐标轴分别平行的矩形区域。窗口的边界上的点也属于该窗口。窗口之间有层次的区别,在多于一个窗口重叠的区域里,只会显示位于顶层的窗口里的内容。 当你点击屏幕上一个点的时候,你就选择了处于被点击位置的最顶层窗口,并且这个窗口就会被移到所有窗口的最顶层,而剩余的窗口的层次顺序不变。如果你点击的位置不属于任何窗口,则系统会忽略你这次点击。 现在我们希望你写一个程序模拟点击窗口的过程。输入格式 输入的第一行有两个正整数,即 N 和 M原创 2021-03-28 20:37:46 · 79 阅读 · 0 评论 -
CCF201403-1 试题名称: 相反数
问题描述 有 N 个非零且各不相同的整数。请你编一个程序求出它们中有多少对相反数(a 和 -a 为一对相反数)。输入格式 第一行包含一个正整数 N。(1 ≤ N ≤ 500)。 第二行为 N 个用单个空格隔开的非零整数,每个数的绝对值不超过1000,保证这些整数各不相同。输出格式 只输出一个整数,即这 N 个数中包含多少对相反数。样例输入51 2 3 -1 -2样例输出2这个题直接用两趟循环循环来做,因为0作为一个中间数不存在绝对值的说法,为了避免再次搜到(其实j从i开始不可原创 2021-03-28 19:22:23 · 122 阅读 · 0 评论 -
CCF-201312-3-最大的矩形
题目:问题描述 在横轴上放了n个相邻的矩形,每个矩形的宽度是1,而第i(1 ≤ i ≤ n)个矩形的高度是hi。这n个矩形构成了一个直方图。例如,下图中六个矩形的高度就分别是3, 1, 6, 5, 2, 3。请找出能放在给定直方图里面积最大的矩形,它的边要与坐标轴平行。对于上面给出的例子,最大矩形如下图所示的阴影部分,面积是10。输入格式 第一行包含一个整数n,即矩形的数量(1 ≤ n ≤ 1000)。 第二行包含n 个整数h1, h2, … , hn,相邻的数之间由空格分隔。(1 ≤原创 2021-03-27 23:13:34 · 218 阅读 · 0 评论 -
201312-2-ccf-ISBN号码
题目问题描述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔之后的五位数字代表该书在出版社的编号;最后一位为识别码。 识别码的计算方法如下: 首位数字乘原创 2021-03-27 21:18:17 · 87 阅读 · 0 评论