![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
CCF
sonzaiwa
这个作者很懒,什么都没留下…
展开
-
CCF 202009-3点亮数字人生 (100分)
(1)题目描述(2)算法思想本题难度其实不大,关键是耐心读题。首先剖析一下题目的输入顺序以及格式:1 //要解决的问题数目,本题由多个独立的子问题构成3 5 //独立问题的电路输入个数以及器件个数XOR 2 I1 I2 //器件类型、输入个数、每个输入端的编号,I开头表示直接输入,O开头表示器件输入XOR 2 O1 I3AND 2 O1 I3AND 2 I1 I2OR 2 O3 O44 //输入的次数,也即输出的次数0 1 1 //每次输入时输入信号的状态1 0 1原创 2020-09-29 20:54:32 · 2342 阅读 · 2 评论 -
CCF 202009-2风险人群筛查 (100分)
(1)题目描述(2)算法思想题目本身没有什么难以理解的地方,就是要注意一下逗留的定义——连续k个或更多坐标均位于矩形内(含边界),这就要求我们记录最大的连续位于矩阵内的次数,实现这一点就没有什么问题了。(3)代码实现#include<iostream>using namespace std;int xmin,ymin,xmax,ymax;bool isin(int x, int y) { if(x>=xmin && x<=xmax &&am原创 2020-09-29 09:47:56 · 453 阅读 · 0 评论 -
CCF 202009-1称检测点查询 (100分)
(1)题目描述(2)算法思想计算距离+根据距离与序号进行排序。这里需要注意的一点就是计算距离时最好保留平方不要随便开根号以防丢失信息,如果开方了记得设置为浮点数不然会丢失小数位。(3)代码实现#include<cmath>#include<iostream>#include<algorithm>using namespace std;struct node { int x; int y; int id; int distance;};b原创 2020-09-29 09:23:17 · 1035 阅读 · 0 评论 -
CCF 201609-3炉石传说 (100分)
(1)题目描述(2)算法思想题目看起来很长,但是只要玩过游戏阅读起来很容易理解,充分理解后按照要求模拟即可没有什么难度。需要注意的一点就是从者的位置,可以选用vector容器存储,方便召唤时的插入以及死亡时的删除。(3)代码实现#include<vector>#include<iostream>using namespace std;struct servant { int HP; int ATK;};struct player { int HeroH原创 2020-08-23 03:20:31 · 273 阅读 · 0 评论 -
CCF 201609-2火车购票 (100分)
(1)题目描述(2)算法思想控制好三个变量——每一排的剩余个数、每一个座位的编号以及每一个座位的分配情况即可。首先从第一排开始扫描,若有满足剩余个数的排则占据其剩余的座位;若直到最后一排仍无法满足分配在同一排的需求则从第一排开始寻找空闲座位直接安排即可。(3)代码实现#include<vector>#include<iostream>using namespace std;struct row { int leftnum; int seatid[5]; in原创 2020-08-23 03:14:13 · 167 阅读 · 0 评论 -
CCF 201609-1最大波动 (100分)
(1)题目描述(2)算法思想计算前后两天差值的绝对值并更新最大值即可。(3)代码实现#include<cmath>#include<iostream>using namespace std;int main() { int n; cin>>n; int MAX=0; int pre,now; for(int i=0; i<n; i++) { cin>>now; if(i!=0) MAX=(abs(now-pre)原创 2020-08-23 03:03:31 · 171 阅读 · 0 评论 -
CCF 201612-2工资计算 (100分)
(1)题目描述(2)算法思想本质上就是初中学的分段函数,可以计算各情况下税后工资的值域,判断当前工资的范围进而进行还原。不过本题比较特殊规定了税前工资整百的特性并且有一个最大值,这使得我们可以按照正向计算的方式穷举出税前工资。这个条件是我在敲完后才发现的所以便没有额外实现,实现起来应该比反向要简单。(3)代码实现#include<iostream>using namespace std;int main() { double sum[7]= {0}; double tax[原创 2020-08-23 02:57:11 · 208 阅读 · 0 评论 -
CCF 201612-1中间数 (100分)
(1)题目描述(2)算法思想理解题意排序后统计大于以及小于中间数的整数数量即可。(3)代码实现#include<iostream>#include<algorithm>using namespace std;int main() { int n; cin>>n; int a[n]; for(int i=0; i<n; i++) cin>>a[i]; sort(a,a+n); int lowernum=0; int up原创 2020-08-23 02:46:59 · 295 阅读 · 0 评论 -
CCF 201703-2学生排队 (100分)
(1)题目描述(2)算法思想利用vector容器先删后插入即可,查找移动编号位置时可以使用中的find( )函数。(3)代码实现#include<vector>#include<iostream>#include<algorithm>using namespace std;int main() { int n; cin>>n; vector<int> Myqueue; for(int i=1; i<=n; i++)原创 2020-08-23 02:40:23 · 141 阅读 · 0 评论 -
CCF 201703-1分蛋糕 (100分)
(1)题目描述(2)算法思想根据题意模拟并单独处理分最后一块蛋糕的情况即可。(3)代码实现#include<iostream>using namespace std;int main() { int w=0; int n,k; cin>>n>>k; int sum=0; int cake[n]; for(int i=0; i<n; i++) cin>>cake[i]; for(int i=0; i<n; i++)原创 2020-08-23 02:35:57 · 189 阅读 · 0 评论 -
CCF 201709-2公共钥匙盒 (100分)
(1)题目描述(2)算法思想三个需要注意顺序的地方:取钥匙时间先后;同一时间先还后取;同一时间还序号小者优先。根据这三个原则进行模拟即可,我在此处先按照钥匙编号从小到大进行了排序,在同一时间还钥匙时即不需额外控制序号小者优先的原则。(3)代码实现#include<iostream>#include<algorithm>using namespace std;struct teacher { int id; int end; int begin;}原创 2020-08-20 00:45:42 · 246 阅读 · 0 评论 -
CCF 201709-1打酱油 (100分)
(1)题目描述(2)算法思想贪心算法,赠送多的方案优先计算。(3)代码实现#include<iostream>using namespace std;int main() { int coin; cin>>coin; int add2num=coin/50; coin-=add2num*50; int add1num=coin/30; coin-=add1num*30; int add0num=coin/10; int sum=7*add2num+4*原创 2020-08-20 00:37:57 · 108 阅读 · 0 评论 -
CCF 201712-2游戏 (100分)
(1)题目描述(2)算法思想设置两个变量分别表示所报数以及小朋友编号;以小朋友未淘汰人数为循环变量,当只剩一人时结束循环;淘汰条件——整除k或个位数为k,整除判断直接%k,判断个位数是否为k%10即可;根据每一轮的情况改变所报数以及当前小朋友编号,跳过时编号++;不跳过时编号以及所报数都++,其中如果产生淘汰则对应编号设置为出局下一次报数直接跳过。(3)代码实现#include<iostream>using namespace std;int main() { int原创 2020-08-20 00:34:28 · 144 阅读 · 0 评论 -
CCF 201712-1最小差值 (100分)
(1)题目描述(2)算法思想排序+计算差值即可(经测试不排序双重循环也不会超时)。(3)代码实现#include<cmath>#include<climits>#include<iostream>#include<algorithm>using namespace std;int MIN=INT_MAX;int main() { int n; cin>>n; int a[n]; for(int i=0; i<n原创 2020-08-20 00:25:46 · 124 阅读 · 0 评论 -
CCF 201803-2碰撞的小球 (100分)
(1)题目描述(2)算法思想首先确定一个前提:小球由于会产生碰撞,其相对位置不变,即左右关系不变。得到了这一个前提在模拟小球之间的碰撞时只需与其前一位置的小球进行位置判断即可,避免了双重循环的O(n^2)复杂度(经测试双重循环也并不会超时)。然后再模拟一下碰壁情况即可。(3)代码实现#include<iostream>#include<algorithm>using namespace std;struct ball { int pos; int speed原创 2020-08-20 00:21:46 · 193 阅读 · 0 评论 -
CCF 201803-1跳一跳 (100分)
(1)题目描述(2)算法思想保存前一次的加分以及跳跃情况,分三种情况即可。(3)代码实现#include<iostream>using namespace std;int main() { int sum=0; int score=0; int id,preid=0; while(cin>>id) { if(id==0) break; else if(id==1) score=1; else { if(preid!=2)原创 2020-08-20 00:15:54 · 113 阅读 · 0 评论 -
CCF 201809-2买菜 (100分)
CCF 201809-2买菜 (100分)(1)题目描述(2)算法思想方法一方法二(3)代码实现方法一方法二(1)题目描述(2)算法思想方法一根据输入的空闲时段标记空闲时间,从两方初始空闲时段的最大值开始遍历至末尾空闲时段的最小值,若当前时刻两方都标记为空闲时间则可交谈时间++。这种方法比较便于理解且易于实现,此处时间规模不大不会出现超时现象,但空间消耗较大。方法二以时段为变量,判断两时段是否有重叠,在得到重叠时段前不断进行下一时段的寻找,得到重叠时段后,若再次出现不重叠时段则标记下一轮寻找原创 2020-08-12 01:47:46 · 187 阅读 · 0 评论 -
CCF 201809-1卖菜 (100分)
(1)题目描述在这里插入图片描述(2)算法思想本题作为第二题其实有点难度,要灵活避坑。首先估算数量级,发现可能存在10^11,超出了int型可以表示的范围,因此花费时间及其中间变量需要设置为long long型;其次是时间复杂度的问题,如果采取保存初始时间结点并不断更新的方式,复杂度则为O(n^2),我觉得很可能会超时(不过并没有实际尝试)。在避开上述比较坑的地方之后我们便可以设计算法了:实现红绿灯1->3->2->1的状态转移(结合前一题的描述),或者初始接收红绿灯时原创 2020-08-12 01:28:51 · 135 阅读 · 0 评论 -
CCF 201812-2小明放学 (100分)
(1)题目描述(2)算法思想本题作为第二题其实有点难度,要灵活避坑。首先估算数量级,发现可能存在10^11,超出了int型可以表示的范围,因此花费时间以及其中间变量需要设置为long long型;其次是时间复杂度的问题,如果采取保存初始时间结点并不断更新的方式,复杂度则为O(n^2),我觉得很可能会超时(不过并没有实际尝试)。在避开上述比较坑的地方之后我们便可以设计算法了:实现红绿灯1->3->2->1的状态转移(结合前一题的描述),或者初始接收红绿灯时间输入时按照转变原创 2020-08-08 21:59:12 · 453 阅读 · 0 评论 -
CCF 201812-1小明上学 (100分)
(1)题目描述(2)算法思想正经的送分题,很多变量其实都用不上,关键是要理解题意为下一题做准备。(3)代码实现#include<iostream>using namespace std;int main() { int sig[4]= {0}; for(int i=1; i<4; i++) cin>>sig[i]; int n; cin>>n; int sum=0; for(int i=0; i<n; i++) { int原创 2020-08-08 21:45:32 · 166 阅读 · 0 评论 -
CCF 201903-2二十四点 (100分)
(1)题目描述(2)算法思想分别读入数值与运算符方便进行计算;优先处理乘法与除法的计算,并且遵循从左至右的顺序;当乘法与除法计算完毕后开始处理加减法得到最终的结果;最终结果等于24则输出"Yes",否则输出"No",注意输出格式以及大小写。(3)代码实现#include<map>#include<vector>#include<iostream>using namespace std;int fun(int n1, int n2, char原创 2020-08-08 16:41:35 · 132 阅读 · 0 评论 -
CCF 201903-1小中大 (100分)
(1)题目描述(2)算法思想本题看似简单实则暗藏杀机,首先必须得完全理解题意:按从大到小的顺序依次输出最大值、中位数以及最小值,其中中位数若为整数则输出为整数,若为分数则保留一位小数并输出。这里最大值以及最小值得输出没有什么好说的,关键是中位数的输出,建议使用C语言printf的输出方式,便于进行格式控制,严格遵循整数直接输出,分数保留一位小数输出的要求,运算过程中也要注意变量类型的隐式转换,防止出现意料之外的错误。此处的保留一位小数是指原结果保留一位小数,不需要进位之类的,一开始我看到四舍五入还原创 2020-08-07 23:53:19 · 304 阅读 · 0 评论 -
CCF 201909-4推荐系统 (100分)
(1)题目描述(2)算法思想本题涉及到频繁的增删以及查询操作,必须先确定合适的数据结构,我一开始选用了vector并在每一次增删后进行排序,只得了10分。涉及到频繁增删应优先考虑红黑树结构的set与map,此处需要对商品信息进行排序,方便起见应选用set容器(map表示映射关系难以对类别、序号以及分数进行统一排序)使用set存储商品信息需要重载’<’,由题意可知优先级:得分>类别>序号,即得分高者靠前,若得分相等则类别低者靠前,若类别也相等,则序号小者优先。(3)代码实现#i原创 2020-08-05 22:03:54 · 452 阅读 · 1 评论 -
CCF 201909-1小明种苹果 (100分)
(1)题目描述(2)算法思想本题的思路很简单,输入初始苹果数量再不断输入疏果数量,统计疏果的个数,疏果完毕后累计剩余苹果的数量。完成每一棵苹果树的计算后按照疏果数量进行排序,相等则序号小者优先。本题我觉得需要注意的一点是防止数据溢出。根据题干末尾的规模数据可以大致估算出存在10^9数量级,即可能会出现超过int最大数值的情况,因此我在此处选取long long类型杜绝溢出的可能性。(如果使用int是否会溢出我并没有进行尝试,第一题可能没有可疑刁难考生吧)(3)代码实现#include<io原创 2020-08-03 00:19:03 · 322 阅读 · 0 评论 -
CCF 201909-2小明种苹果(续) (100分)
(1)题目描述(2)算法思想统计记录信息,每一行数据第二个表示苹果树初始数量,之后表示疏果数量或者当前苹果数量核算值;若小于等于零则表示为疏果数量,当前苹果数减去对应数值;否则表示为核算值,若与之前更新的苹果数不同则表示有掉落,更新苹果数并将当前苹果树标记为有掉落;累计当前苹果数量与有掉落苹果树的数量;完成每一棵苹果树的记录后处理掉落组数值,题目中明确规定将苹果树排列视作一个圆,那么我们统计时直接取模即可表示环形结构。根据题干末尾的规模数据可以大致估算出存在10^9数量级,即可能会出现超过原创 2020-08-04 00:20:00 · 283 阅读 · 0 评论 -
CCF 201912-1报数 (100分)
(1)题目描述(2)算法思想首先是对于报数的处理,含有7或者为7的倍数则跳过,为7的倍数可以直接取模,含有7可以先将整型数据转换为字符串,再调用find( )函数即可判断是否存在7。其次是对于有效报数的处理,每次报数分为有效和无效两种情况,无效报数不计入,这就需要我们设置两个变量分别表示报的数以及当前有效报数次数,其中报的数与甲乙丙丁的对应关系较好,直接取模即可。(3)代码实现#include<string>#include<sstream>#include<i原创 2020-08-02 20:21:25 · 251 阅读 · 0 评论 -
CCF 201912-2回收站选址 (100分)
(1)题目描述(2)算法思想此处给定离散点,由于只需要判断各点之间的联系,因此仅需保存点的坐标而不必构造相应的图,不用考虑内存限制。之后考虑各点之间的关系以及得分规则——各点之间的关系分为相邻以及对角线两种,且必须满足有4点相邻才考虑建立回收站并开始计分;对角线关系仅当确定放置回收站后开始作为计分标准,1个对角线垃圾点对应1分。按照上述规则开始计分,每次计分对应关系的两点可同时进行加分,减少循环次数。(3)代码实现#include<cmath>#include<iost原创 2020-08-02 20:35:46 · 391 阅读 · 0 评论 -
CCF 201912-3化学方程式 (100分)
(1)题目描述(2)算法思想将方程式以等号为界划分为前件与后件以加号为分隔符得到前件与后件的单个化学式得到化学式系数与化学式本身处理化学式括号,对元素进行计数比较前后件元素种类以及个数,种类不同直接输出“N”,否则比较相应元素的个数,若全部相等则输出“Y”。此处实现时的难点在于处理嵌套的括号,我此处采取的是使用栈进行括号匹配,每次得到括号后面的数字,元素下标乘以其即可。(3)代码实现#include<map>#include<stack>#include&原创 2020-08-02 20:02:41 · 315 阅读 · 0 评论