oj

LeetCode OJ:Candy(糖果问题)

不想你离开。 提交于 2020-04-07 09:11:02
There are N children standing in a line. Each child is assigned a rating value. You are giving candies to these children subjected to the following requirements: Each child must have at least one candy. Children with a higher rating get more candies than their neighbors. What is the minimum candies you must give? 一个抠门的人要给一群孩子发糖果,在保证在相邻的孩子之间的rating较高者应该比rating低的获得更多的糖果的情况下,怎样发最少的糖果。 左右各遍历一次即可,代码如下所示: 1 class Solution { 2 public: 3 int candy(vector<int>& ratings) { 4 int sz = ratings.size(); 5 vector<int>candy(sz, 0); 6 if(sz == 0) return 0; 7 if(sz == 1) return 1; 8 candy[0] = 1; 9 for(int i =

项目实战---在线OJ

我的梦境 提交于 2020-04-04 22:33:55
在线OJ 项目功能 :类似于LeetCode及牛客网的在线答题系统,浏览器请求服务器可以获得所有试题信息,包括题目编号、题目名称、题目难度,用户可以选择某一道题进行作答,服务器返回题目描述信息以及预定义好的代码模板,用户编写完代码后浏览器将用户提交的代码返回给服务器,服务器将用户提交的代码与预定义好的题目测试用例结合编译运行,并将结果返回给浏览器告知用户通过率。 上述的功能依赖于几个模块相互配合实现,如下图 接下来就对这几个模块详细的介绍 1.试题模块 在本地创建一个目录保存所有的试题,描述某一道试题时将试题编号、试题名称、试题所在路径、试题难度通过结构体组织起来,试题所在路径中保存着这道题目的描述(desc.txt)、这道题的预定义代码(header.cpp)以及这道题的测试代码(tail.cpp) class Exam { public: std::string _id; std::string _name; std::string _path; std::string _star;//试题难度 }; 所有试题通过unordered_map保存,通过题目编号就可以在unordered_map中得到该试题的所有信息,这样也使查询效率最高。 当浏览器请求所有试题时,试题模块遍历整个unordered_map拿到所有试题信息,然后通过渲染模块返回给浏览器

在线OJ项目

断了今生、忘了曾经 提交于 2020-03-29 23:35:36
需求:实现一个在线判题系统,用户通过浏览器编写和提交代码,通过网络传输,将代码上传到后台,后台对提交的代码进行编译运行,将编译运行结果反馈给用户 在线OJ前后台的流程: 项目分为五大模块: 网络服务模块 搭建http服务器: 本人采用的是GitHub上提供的开源的httplib.h库,在搭建http服务的时候,只需要我们包含该头文件就可以使用了 提供http服务,串联试题模块和编译运行模块 1.获取题目列表 2.提交选中的题目 3.提交题目代码和题目描述,代码的编译框 试题模块 1.从配置文件中加载题目 a.配置文件格式: 约定配置文件当中对题目的描述 题目的编号,题目的名字,题目所在的目录,题目难度 b.加载题目的配置文件,使用数据结构保存加载出来的题目的介绍信息 c.针对每一道题目而言,需要根据给出的路径进行加载 2.提供获取整体题目的接口 给网络服务模块提供一个可以获取所有题目描述的接口,展示给用户 3.提供单个题目的接口 给网络服务模块获取单个题目描述和作答的接口,展示给用户 编译运行模块 1.编译 a.将用户提交的代码写到文件中 b.创建子进程,并且进行程序替换为g++程序,进行编译源码文件 c.获取编译结果写到标准输出文件当中或者写入标准错误文件中 2.运行 a.如果代码走到运行阶段,说明一定编译出来可执行程序了,创建子进程,并且让子进程进行程序替换,替换成可执行程序

哈夫曼树应用——九度OJ题目1107:搬水果

巧了我就是萌 提交于 2020-03-19 08:42:55
哈夫曼算法 1、将所有结点放入集合K。 2、若集合K中剩余结点大于2个,则取出其中权值最小的两个结点,构造他们同时为某个新节点的左右儿子,该新节点是他们共同的双亲结点,设定它的权值为其两个儿子结点的权值和。并将该父亲结点放入集合K。重复步骤2或3。 3、若集合K中仅剩余一个结点,该结点即为构造出的哈夫曼树数的根结点,所有构造得到的中间结点(即哈夫曼树上非叶子结点)的权值和即为该哈夫曼树的带权路径和。 注:使用STL中的优先队列priority_queue可以很容易地实现哈夫曼树,详情见例题。 题目1107:搬水果 题目描述: 在一个果园里,小明已经将所有的水果打了下来,并按水果的不同种类分成了若干堆,小明决定把所有的水果合成一堆。每一次合并,小明可以把两堆水果合并到一起,消耗的体力等于两堆水果的重量之和。当然经过 n‐1 次合并之后,就变成一堆了。小明在合并水果时总共消耗的体力等于每次合并所耗体力之和。 假定每个水果重量都为 1,并且已知水果的种类数和每种水果的数目,你的任务是设计出合并的次序方案,使小明耗费的体力最少,并输出这个最小的体力耗费值。例如有 3 种水果,数目依次为 1,2,9。可以先将 1,2 堆合并,新堆数目为3,耗费体力为 3。然后将新堆与原先的第三堆合并得到新的堆,耗费体力为 12。所以小明总共耗费体力=3+12=15,可以证明 15 为最小的体力耗费值。 输入

zzuli oj 1134 字符串转换

孤人 提交于 2020-03-18 18:55:03
题目链接: https://acm.zzuli.edu.cn/zzuliacm/problem.php?id=1134 Description 输入一个以回车结束的字符串,它由数字和字母组成,请过滤掉所有非数字字符,然后将数字字符串转换成十进制整数后乘以2输出。 Input 输入一个以回车结束的字符串,长度不超过100,由数字和字母组成。 Output 将转换后的整数乘以2输出,测试数据保证结果在int范围内。 Sample Input sg987aa65t498 Sample Output 197530996 AC代码: 1 #include<stdio.h> 2 #include<string.h> 3 #include<ctype.h> 4 void str_rev(char s[],int l); 5 int main() 6 { 7 char b[101],a[101]; 8 int l,i,j,c[105],f; 9 while(scanf("%s",a) != EOF) 10 { 11 l=strlen(a); 12 for(j=0,i=0;i<l;i++) 13 { 14 if(isdigit(a[i])) 15 b[j++]=a[i]; 16 } 17 b[j]='\0';//字符处理的结尾要加结束符号 18 str_rev(b,j); 19 memset(c,0

SWUST OJ 赋值了吗

偶尔善良 提交于 2020-03-16 08:49:29
赋值了吗? Time Limit: 1000MS Memory Limit: 65535KB Submissions: 170 Accepted: 48 Description 现在很多的程序设计语言中,赋值已经是一个不容忽视的问题,如果一个变量在未进行赋值的情况下使用,那么这个值将是不定的(哈哈,我已经被遭了好多次了)!而我写的程序用到的变量实在是太多了,又不想自己统计哪些变量是已经赋值了的,现在就请你帮我统计一下哪些变量已经赋值了。为了简化问题,我们假设最开始仅有变量a中有确定的值。变量为单个小写字母,每行恰好有三个字符,中间一个是赋值运算符'='。请编程求出含N行的程序段运行以后有哪些变量中有确定的值。并且该赋值表达式的出现顺序也即是其在程序中的相对顺序。 Input T(1<= T <= 27) 表示测试实例个数 N (0 < N ≤ 100) 表示赋值表达式的个数 以下N行中,每行3个字符,为一条语句 Output 在一行中按字母表顺序给出所有有确定值的变量名,中间以一个空格隔开。 如果没有变量被赋值,则输出“none”。 Sample Input 3 1 a=a 2 b=c c=d 4 b=a c=d d=b e=f Sample Output a none a b d  这是一个并查集问题,开始时,只有a有值,当a为某个变量赋值的时候,便将该变量加入到a所在集合中

东华大学2020考研计算机OJ题目解答分享——进阶篇(36)

|▌冷眼眸甩不掉的悲伤 提交于 2020-03-11 01:20:02
36 数列1 作者: frankhuhu 时间限制: 10S章节: 一维数组 问题描述 : 思维的严密性是相当重要的,尤其是在程序设计中,一个小小的错误,就可能导致无法想象的后果。明明的爸爸是一名富有经验的程序设计专家,深知思维严密的重要性。于是在明明很小的时候,就通过游戏的方式训练明明的思维严密性。今天,明明的爸爸和明明做了一个数列的游戏。 这个游戏很简单,就是有一数列,现在需要在数列中选出一个或者连续若干个数,要求这些数的和能被11整除。明明的爸爸想锻炼明明思维的严密性,因此要求明明尽可能多的找出符合条件的数列来,最好一个也不要漏掉。 例如有一数列为“11 22 33”,其中11可以被11整除,22可以被11整除,33可以被11整除,11+22=33能被11整除,22+33=55能被11整除,11+22+33=66能被11整除。所以以上一数列能被11整除的情况一共有六种。(注:虽然11+33也能被11整除,但是11和33在数列中没有连续出现,因此不算一种合理的情况。) 明明对这个游戏很感兴趣,高兴地玩了起来。由于粗心,明明总是无法一次就把所有的情况都找出来,这使得他爸爸不是很满意。于是明明爸爸决定先降低游戏的难度,事先告诉明明某一数列总共有多少种符合条件的选择数的方法,然后再让明明去选。明明的爸爸请你帮一个忙,他不想自己找出所有的情况,因此请你写一个程序

东华大学2020考研计算机OJ题目解答分享——进阶篇(26)

你。 提交于 2020-03-09 19:02:42
26 树 作者: ZhuKai时间限制: 10S章节: 一维数组 问题描述 : 明明是一家地铁建设公司的职员,他负责地铁线路的规划和设计。一次,明明要在一条长L的马路上建造若干个地铁车站。 这条马路有一个特点,马路上种了一排树,每两棵相邻的树之间的间隔都是一米。 如果把马路看成一个数轴,马路的一端在数轴0的位置,马路的另一端在L的位置,那么这些树都种在数轴的整数点上,即0,1,2,…,L上都种有一棵树。 由于要设计建造地铁站的缘故,所以需要把一些树移走,明明为了移树的方便,把地铁站的区域也建在了数轴上两个整数点之间,由于有多条地铁线路,地铁车站的区域可能会有部分的重合(重合的区域明明将来会设计成一个大型的车站,移树的时候不必考虑地铁站重合区域的问题)。 现在明明想请你帮一个忙,他把车站区域的位置告诉你,即告诉你数轴上的两个整数点,在这两个整数点之间是车站的区域,请你写一个程序,计算出把所有车站区域两点之间的树移走以后,这条马路上还剩多少棵树。 例如:马路长为10,要建造2个地铁车站,车站的区域分别是2到5和3到6,原先的马路上一共有11棵树,在2到5的位置上建车站后,需要移走4棵树,在3到6的位置上建车站后,也需要移走4棵树,但是3到6这个区域和2到5这个区域有部分重合,所以只需移走1棵树即可,这样总共移走的树是5棵,剩下的树就是6棵。 明明的问题可以归结为

关于本站

可紊 提交于 2020-03-07 20:50:23
关于本站 蒟蒻我在为时不到两年的OI生涯中学到了很多,于是创建了此 blog。(2020.3.7) 主要是OI学习,当然也有随笔、游记······ 欢迎各位dalao来吊打我以及我的 blog ,同时希望我的每一篇文章都对你有帮助。 经常有人问的问题 基本情况 站长: 弱弱的lpf 。 更新时间: 上学期间一周左右,假期几乎每天 。 可以转载文章吗: 不用经过私信我,可以直接转载(请转载时在文首注明出处) 。 您的OI成绩怎么样: 如上所述,弱弱的 。 qq: 3113942188(没事尽量不要加,实在需要请注明“我来自你的blog,想找你...”) 。 博客主题 这个主题就说来话长了,比较难搭建(仅对于我来说)。 如果你认为它很好看,可以在网上搜索:“博客园美化”。(我就随便找了一篇) 网上的教程比较详细,运气好的话,你可以找到和我一样教程。 如果实在找不到又很想要...(让我想想解决方案,因为我也找不到原来的教程网址了)。 其他问题 这个板块主要是留给下方评论区的同学的提问,如果还有问题请在下方留言。 关于OI 相信看到这篇文章的人都是OIer,其实我对于OI学习是非常迷茫的。 所以如果有dalao,可以在评论区分享自己的经验。 推荐几本书吧: 《算法竞赛入门经典》lrj老师的著作。(适合入门选手,题量很大) 《算法竞赛进阶指南》lyd老师的著作。(本书体系完善,且有专门的OJ

东华oj-进阶题第45题-等差数列

吃可爱长大的小学妹 提交于 2020-03-07 20:05:17
45 等差数列 作者: xxx时间限制: 1S章节: 一维数组 问题描述 : 一个等差数列是一个能表示成a, a+b, a+2b,…, a+nb (n=0,1,2,3,…) 在这个问题中a是一个非负的整数,b是正整数。 写一个程序来找出在双平方数集合S中长度为n的等差数列。双平方数集合是所有能表示成p2+q2的数的集合。 输入说明 : 第一行: N(3<= N<=25),要找的等差数列的长度。 第二行: M(1<= M<=250),搜索双平方数的上界0 <= p,q <= M。 输出说明 : 如果没有找到数列,输出`NONE’。 如果找到了,输出一行或多行, 每行由两个整数组成:a,b 这些行应该先按b排序再按a排序(均为升序)。 将不会有多于10,000个等差数列。 输入范例 : 5 7 输出范例 : 1 4 37 4 2 8 29 8 1 12 5 12 13 12 17 12 5 20 2 24 代码: /* T45 等差数列 算法概述:设置一个标记数组,用于标记某个数是否为双平方数。 对于每一个a,b,测试它们确定的一个长度为N的等差数列的每一项 是否为双平方数,若测试通过,则输出a,b,否则进行下一次测试。 */ # include <stdio.h> # include <string.h> # define MAX_SIZE 250 * 250 * 2 int