
CCF
不断奔跑
唯有不断奔跑!
展开
-
JAVA CCF-202012-2 期末预测之最佳阈值
欢迎访问我的CCF认证解题目录题目思路过程题意很简单,思路也很简单,暴力两层 for 循环,但注意的是,数据量最大达到 10510^5105,显然两层 for 循环会超时。对于优化来说有很多种方法,我就写我考试时写的方法吧。预测成功的个数包括两种:小于该安全指数且挂科的人数大于等于该安全指数且没有挂科的人数我们可以使用 set 升序存储所有的安全指数,对于遍历的安全指数来说,我们可以累计挂科的人数(升序遍历保证),对于没挂科的人数,则是 所有没挂科人数 - 当前遍历到的没挂科人数。原创 2020-12-30 15:26:35 · 2343 阅读 · 11 评论 -
JAVA CCF-202012-1 期末预测之安全指数
欢迎访问我的CCF认证解题目录题目思路过程没什么好说的,直接 ans += in.nextInt() * in.nextInt()代码import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(), ans = 0;原创 2020-12-30 15:03:04 · 569 阅读 · 0 评论 -
JAVA CCF-201909-4 推荐系统
欢迎访问我的CCF认证解题目录题目思路过程推荐系统有三种操作,分别是新增、删除、查询。这个题主要的难点就在于维护一个有序的集合,以便去查询,那么可以使用 TreeSet 进行一个操作。新增操作: 直接添加到 set 集合中自动完成一个排序,每次都是lognlog_nlogn的复杂度,最多达到105logn10^5log_n105logn。删除操作: 题目输入了类别和id,对于 TreeSet 的删除操作,还需要一个 score变量,所以新建一个 map 去做一个商品到 score 的一原创 2020-12-12 22:10:22 · 290 阅读 · 1 评论 -
JAVA CCF-202009-2 风险人群筛查
欢迎访问我的CCF认证解题目录题目思路过程代码import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.StreamTokenizer;import java.util.*;public class Main { public static void main(String[] args) throws Exceptio原创 2020-11-19 10:45:30 · 390 阅读 · 1 评论 -
JAVA CCF-202009-1 称检测点查询
欢迎访问我的CCF认证解题目录题目思路过程求距离最近的三个点,如果距离相同,则下标小的优先,我们可以通过(x1x_1x1 - x2x_2x2)^ 2 + (y1y_1y1 - y2y_2y2) ^ 2 求出距离,然后使用优先队列自动完成排序,最后弹出前三个点即可。这里使用int[]存储下标和距离,int[0]表示下标,int[1]表示距离代码import java.util.*;public class Main { public static void main(原创 2020-11-19 10:38:00 · 481 阅读 · 0 评论 -
JAVA CCF-201809-4 再卖菜
欢迎访问我的CCF认证解题目录题目思路过程给的是第二天的菜价,求的是第一天字典序最小的菜价,假设第一天的菜价为 a[1]、a[2] ... a[n],第二天的菜价为 b[1]、b[2] ... b[n]。现在是已知b,求a字典序最小的情况,那么看情况应该是DFS进行遍历操作,先枚举出第一个a进行递归操作,然后计算出可能存在的最小a,递归直到找出所有的a。根据题意可知第一天和第二天的关系是:第1位只需满足 1 <= a[0] <= 2*b[0] 即可(价格必须大于0)第2位:原创 2020-11-09 18:54:49 · 201 阅读 · 2 评论 -
JAVA CCF-202006-2 稀疏向量
欢迎访问我的CCF认证解题目录题目思路过程由题意可知,我们只需要两个向量中相同 index 部分的 value 进行相乘即可。需要注意的是,要使用 long 类型进行存储总和,int 可能会溢出。我们可以定义一个 map<Interger, Interger> 对第一个向量进行存储,对于第二个向量,直接进行 value * map.getOrDefault(index, 0) 操作即可,如果有值,则直接相乘,没有值的话 map 返回0,相乘也不影响。具体看代码实现。代码imp原创 2020-11-06 15:38:40 · 313 阅读 · 3 评论 -
JAVA CCF-202006-1 线性分类器
欢迎访问我的CCF认证解题目录题目描述思路过程:题意就是给一些A点和B点,然后再给出一些直线,判断是否能将A、B划分开来。根据学过的数学知识,我们知道对于直线 AxAxAx + ByByBy + C = 0,当点(x0x_0x0, y0y_0y0)满足AxAxAx + ByByBy + C > 0时,点在直线的上方,当AxAxAx + ByByBy + C < 0时,点在直线的下方,如果AxAxAx + ByByBy + C = 0,则点在直线上。然后题目保证不存在恰好落在给原创 2020-11-05 21:03:23 · 304 阅读 · 3 评论 -
JAVA CCF-201912-3 化学表达式
欢迎访问我的CCF认证解题目录题目描述思路过程使用HashMap<String, Integer>来检查每条等式是否相等,左边的表达式对应的原子数量为正,右边为负,当结果集里面所有的key都为0时,表示该等式相等新建一个类Node,来存储每个括号区间内的原子数量,有两个指针,分别指向父亲和儿子.将读入的字符串按=进行切割,在按+进行切割,对于每个化学式:首先读入系数...原创 2020-03-03 12:01:37 · 852 阅读 · 0 评论 -
JAVA CCF-201912-2 回收站选址
欢迎访问我的CCF认证解题目录题目描述思路过程新建一个HashMap<Integer, HashSet<Integer>>来存储坐标信息。映射规则:row->col集合。用int[][] way1 = {{0,1}, {0,-1}, {-1,0}, {1,0}}来遍历上下左右四个方向,如果四个方向都存在垃圾,则表明可以建立垃圾站。用int[][] w...原创 2020-02-12 13:39:59 · 695 阅读 · 1 评论 -
JAVA CCF-201912-1 报数
欢迎访问我的CCF认证解题目录题目描述思路过程直接看代码即可代码import java.util.*;public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(...原创 2020-02-12 13:00:58 · 397 阅读 · 0 评论 -
JAVA CCF-201903-2 二十四点
欢迎访问我的CCF认证解题目录题目描述思路过程本题是判断表达式的值是否为24。表达式的求值可以分为一个个二元运算,前一个二元运算的结果作为下一个运算的输入。例:3 - 2 + 1。3和2是操作数,-是运算符,它们的运算结果1作为下一个二元运算的输入,所以下一个二元运算是1 + 1。我们把表达式拆分成一个个二元运算来执行。新建两个栈,一个存储数字,一个存储符号。由于乘法和除法的...原创 2020-02-12 11:53:07 · 454 阅读 · 3 评论 -
JAVA CCF-201903-1 小中大
欢迎访问我的CCF认证解题目录题目描述思路过程注意:如果中位数不是整数,要四舍五入保留一位数。(3+2)/2 = 2.5,不是3.0。我一直以为要四舍五入到整数。。。。代码import java.util.Scanner;public class Main { public static void main(String[] args) { S...原创 2020-02-11 19:44:49 · 309 阅读 · 2 评论 -
JAVA CCF-201812-2 小明放学
欢迎访问我的CCF认证解题目录题目描述思路过程题目给的灯都是小明出发时的状况,所以对于每个灯我们还得自己计算到达时的状态。新建一个sum变量来累计时间,由于极端情况下int会数据溢出,所以得采用Long类型。新建一个变量x,存储红绿灯一轮所需的时间。开始读入数据,如果是路,则直接 sum += time;这一步配合下面的图进行观看容易理解一些。如果不是路,我们计算出这一轮剩余...原创 2020-02-11 18:51:11 · 444 阅读 · 2 评论 -
JAVA CCF-201812-1 小明上学
欢迎访问我的CCF认证解题目录题目描述思路过程注意黄灯的话还要加上红灯就行了代码import java.util.Scanner;public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner in = new Scan...原创 2020-02-10 13:04:26 · 300 阅读 · 0 评论 -
JAVA CCF-201809-2 买菜——8行代码
欢迎访问我的CCF认证解题目录题目描述思路过程新建一个长度为1000005的boolean数组用来标记时间段区间,首先读入小H的时间段进行区间的标记,接着读入小W的时间段,如果时间段重复的话说明可以聊天,cnt++例:1 3表示区间2和3,2 4表示区间3和4,同样有区间3,cnt++JAVA 11行代码import java.util.*;public class Main ...原创 2020-02-10 12:22:13 · 334 阅读 · 0 评论 -
JAVA CCF-201809-1 卖菜
欢迎访问我的CCF认证解题目录题目描述思路过程水题。。代码import java.util.Scanner;public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner in = new Scanner(System....原创 2020-02-09 19:07:53 · 234 阅读 · 0 评论 -
JAVA CCF-201803-2 碰撞的小球
欢迎访问我的CCF认证解题目录题目描述思路过程新建一个类来存放小球的信息,num表示小球的位置,move表示移动的距离,相撞时用move = move * -1来改变方向。新建一个标记数组,长度为l+1,用来表示位置上有多少个球,以用来判断是否相撞,左边界和右边界初始值为2。开一个for循环来走时间,每一轮都重置标记数组,先移动,后判断是否相撞代码import java....原创 2020-02-09 18:58:34 · 353 阅读 · 0 评论 -
JAVA CCF-201803-1 跳一跳
欢迎访问我的CCF认证解题目录题目描述思路过程直接模拟即可代码import java.util.*;public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int ans = 0; ...原创 2020-02-09 17:52:09 · 258 阅读 · 0 评论 -
JAVA CCF-201712-2 游戏
欢迎访问我的CCF认证解题目录题目描述思路过程建一个boolean数组来标记玩家是否出局,使用for循环模拟转圈index = (index+1)%n。每次轮到未出局的玩家时,判断是否出局,出局后标记为true表示出局,并将人数-1,当人数为1时结束循环。代码import java.util.*;public class Main { public static ...原创 2020-02-09 17:23:42 · 282 阅读 · 2 评论 -
JAVA CCF-201712-1 最小差值
欢迎访问我的CCF认证解题目录题目描述思路过程直接两个for循环比较即可代码import java.util.*;public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.ne...原创 2020-02-09 15:04:53 · 257 阅读 · 0 评论 -
JAVA CCF-201709-2 公共钥匙盒
欢迎访问我的CCF认证解题目录题目描述思路过程代码1:新建一个num数组模拟钥匙盒,新建一个类Key来表示借和还的信息,key为编号,time为处理时间,type为类型(1表示借,-1表示还)借的时候直接遍历数组即可,拿钥匙的时候标记为-1,表示钥匙盒该位置为空。还的时候遍历数组找到-1,填入即可代码2:代码1的借和还时间复杂度都为n,可以借助堆和映射来优化到log(n...原创 2020-02-08 20:37:44 · 362 阅读 · 0 评论 -
JAVA CCF-201709-1 打酱油
欢迎访问我的CCF认证解题目录题目描述思路过程水题,直接看代码代码import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.n...原创 2020-02-08 19:55:48 · 214 阅读 · 0 评论 -
JAVA CCF-201703-2 学生排队
欢迎访问我的CCF认证解题目录题目描述思路过程出队入队可以使用内置的List进行模拟操作代码import java.util.LinkedList;import java.util.List;import java.util.Scanner;public class Main { public static void main(String[] args) {...原创 2020-02-07 21:28:16 · 275 阅读 · 0 评论 -
JAVA CCF-201703-1 分蛋糕
欢迎访问我的CCF认证解题目录题目描述思路过程水题,没什么好说的。。代码import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = i...原创 2020-02-07 20:53:25 · 219 阅读 · 0 评论 -
JAVA CCF-201612-3 权限查询
欢迎访问我的CCF认证解题目录题目描述思路过程由于后面的查询需要知道权限是否分等级,所以我们要把前面的权限存储起来,-1表示不分等级,可以使用map进行存储,方便查询。那么后面的用户和角色也差不多,也是用map进行存储,其他就按照题目要求来就行了,比较简单的模拟题,直接看代码即可。注意:出现重复权限的话只存储等级大的权限代码import java.util.HashMap;...原创 2020-02-07 16:41:59 · 241 阅读 · 1 评论 -
JAVA CCF-2016-12-2 工资计算
欢迎访问我的CCF认证解题目录题目描述思路过程由题目可知税率和税后工资,那么我们通过这个公式即可求出税前工资,税前工资 - 税前工资 * 税率 = 得到的工资,转化得到 税前工资 = 得到的工资 / ( 1 - 税率 )代码import java.util.*;public class Main { public static void main(String[] ...原创 2020-02-07 15:25:02 · 296 阅读 · 0 评论 -
JAVA CCF-201609-3 炉石传说
题目描述思路过程召唤角色时,当前位置和右边位置的角色编号会+1,而当角色死亡时,右边位置的角色编号会-1,这里可以使用java内置的List来完成这个操作,用下标来表示编号,直接插入和删除即可完成上面两个操作。用flag来标记当前操作的玩家注意:英雄死亡不清空代码import java.util.*;public class Main { public static...原创 2020-02-06 13:06:30 · 350 阅读 · 0 评论 -
JAVA CCF-201609-2 火车购票
题目描述思路过程使用栈存储一排剩余的座位号,如果可以坐在一排,那么在这个栈弹出对应的座位数,如果不能坐一排,则从第一排开始遍历弹出座位号。代码import java.util.ArrayList;import java.util.List;import java.util.Scanner;import java.util.Stack;public class Main {...原创 2020-02-05 19:20:50 · 414 阅读 · 0 评论 -
JAVA CCF-201601-1 最大波动
题目描述思路过程直接用Math.abs求取临近两个值的差的绝对值,如果更大则更新max值即可。代码import java.util.Scanner;public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); ...原创 2020-02-05 16:35:41 · 199 阅读 · 0 评论 -
JAVA CCF-201609-4 交通规划
题目描述思路过程最短路径的变形题,首先要确保点到首都的最短距离不变,再去节省修路的费用,我们可以定义一个数组pre保存上一个节点,当访问length[index]时,length[pre[index]]一定是已经访问过的了,修建时用sum += length[index] - length[pre[index]];去计算。代码import java.io.BufferedReader...原创 2019-12-10 21:12:45 · 224 阅读 · 0 评论 -
JAVA CCF-201703-4 地铁修建
题目描述思路过程最开始我以为是求最小生成树的最大边。。。结果错了,重新看了一下题,发现A市决定在1号到n号枢纽间修建一条地铁这句话,只要1和n联通了就好,最小生成树最大边的变形题,所以只要在最小生成树的模板上稍加修改即可,当1和n联通时,就结束循环,输出代码import java.io.BufferedReader;import java.io.IOException;impor...原创 2019-12-10 20:17:56 · 218 阅读 · 0 评论 -
JAVA CCF-201709-4 通信网络
题目描述思路过程A点能访问B点,那么AB点就互相知道对方的存在,我们可以对每一个点进行一次DFS,定义一个二维的boolean数组对访问到的点进行相互标记,最后统计有多少个点能访问n个点(包括自己)代码import java.util.ArrayList;import java.util.Arrays;import java.util.Scanner;public class...原创 2019-12-10 19:50:58 · 221 阅读 · 0 评论 -
JAVA CCF-201812-4 数据中心
题目描述思路过程题目写得比较复杂,其实就是求最小生成树的最大边,直接套最小生成树的模板修改一下即可代码import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Comparator;import java.util.Pri...原创 2019-12-10 10:06:51 · 208 阅读 · 0 评论 -
JAVA CCF-201409-3 字符串匹配
题目描述思路过程这题直接使用正则表达式,如果是0就设置为忽略大小写模式,直接进行匹配输出即可代码import java.util.Scanner;import java.util.regex.Matcher;import java.util.regex.Pattern;public class Main { public static void main(String[...原创 2019-12-10 09:27:42 · 184 阅读 · 0 评论 -
JAVA CCF-201503-4 网络延时
题目描述思路过程题目求的是树的最长路径最长距离 = 最大的两个子节点高度和 || 节点的最深深度构建一个类作为树的节点,height表示树的最深深度,child存储子节点的编号,对于连接了电脑的交换机来说,height初始值应该为1。进行DFS遍历,不断更新最长距离和节点的最深深度,具体看下面代码。代码import java.util.ArrayList;import jav...原创 2019-12-09 11:01:22 · 170 阅读 · 0 评论 -
JAVA CCF-201503-3 节日
题目描述思路过程思路倒是不复杂,直接计算出相差的天数然后再进行转换即可,不过要注意的是:如果一号是星期日,那么1-7号都算是第一个星期,我之前直接把2号当前第二个星期了,害我找了好久的错误。。。。样例也没给我说清楚,坑!!!!代码import java.util.Scanner;public class Main{ //每月的天数 static int[] mouth = ...原创 2019-12-08 21:23:19 · 200 阅读 · 0 评论 -
JAVA CCF-201503-2 数字排序
题目描述思路过程题目给定一些数字,让这些数字按次数降序、数字升序的形式输出,给定的数字不会超过1000,且是非负数。我们可以定义一个长度为1005的数组保存数字和次数两个信息,读入数据,然后按要求排序即可代码import java.util.Arrays;import java.util.Comparator;import java.util.Scanner;public ...原创 2019-12-08 17:12:58 · 201 阅读 · 0 评论 -
JAVA CCF-201412-4 最优灌溉
题目描述思路过程这道题是最小生成树的题,好水啊这题,直接套就行了,都不用怎么改,这里我用的是克鲁斯卡尔算法。注意:这道题输入量较大,使用java进行求解的话要优化一下输入,否则会超时代码import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import...原创 2019-12-08 15:39:35 · 275 阅读 · 0 评论 -
JAVA CCF-201412-2 Z字形扫描
题目描述思路过程通过观察可以看出,移动是有规律的,由4个方向循环移动。z字形扫描的前半段和后半段的移动方式是不同的,而且右和下这两个方向只要移动一次就会改变方向,而其他方式是移动到越界才会改变,而当改变后还越界时就说明到了后半段的移动前半段的移动方式:右,左下,下,右上后半段的移动方式:下,左下,右,右上可以发现移动方式只是交换了右和下的位置我们可以定义一个数组表...原创 2019-12-03 19:32:00 · 223 阅读 · 0 评论