oj

牛客oj 习题4.7String Matching(KMP)&&习题4.6字符串匹配

心已入冬 提交于 2020-03-07 04:50:11
练KMP我认为没什么技巧,背代码就完事了。我的口诀:(仅限于自己理解) (1)、先回溯主串后回溯子串,回溯哪个哪个为负一; (2)、推nextTable时拿子串对应的下标开刀。 PS:这题把nextTable数组换成next数组居然有歧义,这辣鸡编译器居然还会把next数组设成关键字,第一次碰到这种错害得我检查了一个小时,真是绝了。 #include <cstdio> #include <iostream> #include <algorithm> #include <string> #include <cstring> #include <vector> #include <climits> using namespace std; const int MAXN = 1000005; const int INF = INT_MAX; int nextTable[MAXN]; void getNext(string &text, string &pattern){ int n = text.size(); int m = pattern.size(); int i, j; j = 0; nextTable[j] = -1; i = nextTable[j]; while(j < m){ if(i == -1 || pattern[i] == pattern[j]){ i++; j+

东华oj-进阶题第44题-双重回文数

我的梦境 提交于 2020-03-06 18:44:36
44 双重回文数 作者: xxx时间限制: 1S章节: 一维数组 问题描述 : 如果一个数从左往右读和从右往左读都是一样,那么这个数就叫做回文数。例如,12321就是一个回文数,而77778就不是。当然,回文数的首和尾都应是非零的,因此0220就不是回文数。事实上,有一些数(如21),在十进制时不是回文数,但在其它进制(如二进制时为10101)时就是回文数。 编一个程序,从文件读入两个十进制数 N (1<= N <= 15) S (0 <S <10000) 然后找出前N个满足大于S且在两种或两种以上进制(二进制至十进制)上是回文数的十进制数,输出到文件上。 本问题的解决方案不需要使用大于4字节的整型变量。 输入说明 : 只有一行,用空格隔开的两个数N和S。 输出说明 : N行, 每行一个满足上述要求的数,并按从小到大的顺序输出。 输入范例 : 3 25 输出范例 : 26 27 28 代码: /* T44 双重回文数 */ # include <stdio.h> # include <string.h> # define MAX_SIZE 100 int isSymNum ( char num [ ] ) ; void toXScale ( char res [ ] , int n , int x ) ; int main ( ) { int i = 0 , j = 0 ; int

[week2]模拟OJ成绩排名系统(简易版)

浪子不回头ぞ 提交于 2020-03-06 13:40:28
文章目录 题意 Input Output 输入样例 输出样例 分析 总结 代码 题意 【题面宛如小作文233】 程序设计思维作业和实验使用的实时评测系统,具有及时获得成绩排名的特点,那它的功能是怎么实现的呢? 我们千辛万苦怼完了不忍直视的程序并提交以后,评测系统要么返回AC,要么是返回各种其他的错误,不论是怎样的错法,它总会给你记上一笔,表明你曾经在这儿被坑过,而当你历经千辛终将它AC之后,它便会和你算笔总账,表明这题共错误提交了几次。 在岁月的长河中,你通过的题数虽然越来越多,但通过每题时你所共花去的时间(从最开始算起,直至通过题目时的这段时间)都会被记录下来,作为你曾经奋斗的痕迹。特别的,对于你通过的题目,你曾经的关于这题的每次错误提交都会被算上一定的单位时间罚时,这样一来,你在做出的题数上,可能领先别人很多,但是在做出同样题数的人中,你可能会因为罚时过高而处于排名上的劣势。 例如某次考试一共八道题(A,B,C,D,E,F,G,H),每个人做的题都在对应的题号下有个数量标记,负数表示该学生在该题上有过的错误提交次数但到现在还没有AC,正数表示AC所耗的时间,如果正数a跟上了一对括号,里面有个正数b,则表示该学生AC了这道题,耗去了时间a,同时曾经错误提交了b次。例子可见下方的样例输入与输出部分。 Input 输入数据包含多行,第一行是共有的题数n(1≤n≤12)以及单位罚时m

如何自己搭建一个OJ(在线判题系统)?

好久不见. 提交于 2020-03-05 08:14:23
文章目录 1. centOS7/LINUX 云服务器 2. 如何开一个桌面? 2.1. yum groupinstall "X Window System" #X 窗口系统 3. 如何安装python? 4.2.为什么需要pip3? 4.2.1 在命令“pip install docker-compose”中需要pip3.0及其以上 5. 如何安装Docker? 5.2.仓库 5.3 安装Docker Engine-Community和containerd 5.4 启动Docker。 5.5 通过运行hello-world 映像来验证是否正确安装了Docker Engine-Community 。 5.6 参考网站 6. 安装QingdaoU/OnlineJudgeDeploy 6.1.安装必要的依赖 6.1.1. sudo apt-get update && sudo apt-get install -y vim python-pip curl git 6.1.2. pip install docker-compose 6.1.3.问题! 6.1.3.1.这里是通过apt-get安装 而非 yum ##6.1.3.2.我直接讲"apt-get"替换为了"yum"完成了运行 6.1.3.3.我搜索的所有页面对于CentOS安装apt-get都不可行,可能是版本问题 6.2.开始安装

杭电OJ题目分类

纵饮孤独 提交于 2020-03-05 07:52:09
杭电OJ题目分类 杭电ACM试题分类 注:网上搜的 第一篇 1001 这个就不用说了吧 1002 简单的大数 1003 DP经典问题,最大连续子段和 1004 简单题 1005 找规律(循环点) 1006 感觉有点BT的题,我到现在还没过 1007 经典问题,最近点对问题,用分治 1008 简单题 1009 贪心 1010 搜索题,剪枝很关键 1011 1012 简单题 1013 简单题(有个小陷阱) 1014 简单题 1015 可以看作搜索题吧 1016 经典的搜索 1017 简单数学题 1018 简单数学题 1019 简单数学题 1020 简单的字符串处理 1021 找规律的数学题 1022 数据结构的题(栈的应用) 1023 特殊的数(Catalan Number) 1024 经典DP,最大M子段和 1025 经典DP,最长递增子序列(要用NLogN的方法过) 1026 搜索 1027 数学题(或用STL) 1028 经典问题,整数拆分,用母函数做 1029 简单题(一般方法容易超时) 1030 简单题,可用模拟过 1031 简单题 1032 简单题 1033 模拟题 1034 Candy Sharing Game 1035 模拟题 1036 简单题 1037 简单题,不是一般的简单 1038 简单题 1039 字符串处理 1040 简单题,排序 1041 简单题,用大数

力扣 OJ 853. 车队

ぐ巨炮叔叔 提交于 2020-03-04 13:36:11
题目: N 辆车沿着一条车道驶向位于 target 英里之外的共同目的地。 每辆车 i 以恒定的速度 speed[i] (英里/小时),从初始位置 position[i] (英里) 沿车道驶向目的地。 一辆车永远不会超过前面的另一辆车,但它可以追上去,并与前车以相同的速度紧接着行驶。 此时,我们会忽略这两辆车之间的距离,也就是说,它们被假定处于相同的位置。 车队 是一些由行驶在相同位置、具有相同速度的车组成的非空集合。注意,一辆车也可以是一个车队。 即便一辆车在目的地才赶上了一个车队,它们仍然会被视作是同一个车队。 会有多少车队到达目的地? 示例: 输入:target = 12, position = [10,8,0,5,3], speed = [2,4,1,1,3] 输出:3 解释: 从 10 和 8 开始的车会组成一个车队,它们在 12 处相遇。 从 0 处开始的车无法追上其它车,所以它自己就是一个车队。 从 5 和 3 开始的车会组成一个车队,它们在 6 处相遇。 请注意,在到达目的地之前没有其它车会遇到这些车队,所以答案是 3。 提示: 0 <= N <= 10 ^ 4 0 < target <= 10 ^ 6 0 < speed[i] <= 10 ^ 6 0 <= position[i] < target 所有车的初始位置各不相同。 代码: bool cmp(pair

东华OJ基础题87 发工资咯

…衆ロ難τιáo~ 提交于 2020-03-02 21:42:53
问题描述 : 作为需要养家糊口的人,最盼望的日子就是每月发工资的日子,呵呵 但是对于财务处的工作人员来说,这一天则是很忙碌的一天,财务处的小胡最近就在考虑一个问题:如果每个员工的工资额都知道,最少需要准备多少张人民币,才能在给每位员工发工资的时候都不用员工找零呢? 这里假设员工的工资都是正整数,单位元,人民币一共有100元、50元、20元、10元、5元、2元和1元七种。 输入说明 : 首先输入一个T,表示包含T组测试数据, 每组测试数据的第一行是一个整数n(n<100),表示员工的人数, 第二行是n个员工的工资。 输出说明 : 对于每组测试数据输出一个整数x,表示至少需要准备的人民币张数。 每个输出占一行,行首与行尾无多余空格,前后也无多余空行。 输入范例 : 3 1 299 2 299 197 5 123 4567 89 10 12345 输出范例: 8 14 186 总结 1.理顺思路就可以了;还是比较喜欢动态分配内存,心里干净,“拒绝浪费”。 2.加油! # include <stdio.h> # include <stdlib.h> int main ( ) { int count ; int i , j , T , n , sum ; int * w ; int a [ 7 ] = { 100 , 50 , 20 , 10 , 5 , 2 , 1 } ; scanf (

【牛客网OJ题】:人民币转换

浪尽此生 提交于 2020-03-02 17:14:00
【牛客网题目:人民币转换】 1、中文大写金额数字前应标明“人民币”字样。中文大写金额数字应用 壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿、元、角、分、零、整等字样填写。(30分) 2、中文大写金额数字到“元”为止的,在“元”之后,应写“整字, 如¥ 532.00应写成“人民币伍佰叁拾贰元整”。在”角“和”分“后面不写”整字。(30分) 3、阿拉伯数字中间有“0”时,中文大写要写“零”字,阿拉伯数字中间连续有几个“0”时, 中文大写金额中间只写一个“零”字,如¥6007.14,应写成“人民币陆仟零柒元壹角肆分“。 输入描述: 输入一个double数 输出描述: 输出人民币格式 输入例子 151121.15 **输出 人民币拾伍万壹仟壹佰贰拾壹元壹角伍分 import java.util.Scanner; public class RenMingBiTranslate { private final static char[] NUM = {'零', '壹', '贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖', '拾', '佰', '仟', '万', '亿'};//数组下标和其对应元素是一样的 public static void main(String[] args) { Scanner scanner = new Scanner(System

东华OJ基础题80 平均分

删除回忆录丶 提交于 2020-03-02 11:46:47
问题描述 : 从键盘依次输入每个学生的学号、姓名、出生年月、3门课的成绩,计算并打印出每个学生的平均成绩。 要求使用结构体数组。 输入说明 : 第一行,整数n,表示一共有n个学生。 从第二行开始共n行,每行包含学号,姓名,出生年,出生月,数学,英语,C语言的成绩,用空格分隔,姓名不含空格。 输出说明 : 共n行,每行包含学号,姓名,出生年/月,数学,英语,C语言,平均成绩。 输出浮点数使用“%.0f”,出生年月用“/”分开,数据之间以一个空格分隔。 输入范例 : 2 901 hulei 1990 8 67 78 89 902 fangang 1991 7 85 69 76 输出范例: 901 hulei 1990/8 67 78 89 78 902 fangang 1991/7 85 69 76 77 总结 1.属于结构成员访问的基础题,除了直接访问外,还可以设置一个结构数组可能会更好。 2.加油!!! # include <stdio.h> struct date { int year ; int month ; } ; struct score { double math ; double English ; double C ; } ; typedef struct stu { int ID ; char name [ 16 ] ; struct date birthday

北大oj 2018 best cow

萝らか妹 提交于 2020-03-02 10:25:56
给定一个长度为 n 的非负整数序列 A ,求一个平均数最大的,长度不小于 L 的子段。 输入格式 第一行用空格分隔的两个整数 n 和 L; 第二行为 n 个用空格隔开的非负整数,表示 Ai 输出格式 输出一个整数,表示答案的 1000 倍。不用四舍五入,直接输出。 样例 样例输入 10 6 6 4 2 10 3 8 5 9 4 1 样例输出 6500 数据范围与提示 1≤n≤10^5,0≤A​i​​≤2000。 这道题可以二分平均数的大小,然后在当前情况下把每一位都减去平均数,这样问题就变成了找一个非负的长度不小于L的子序列和,所以利用前i项和减去前面不小于L的最小前缀(并且是连续的)。 #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int n,L; double a[100003] ,b[100003],f[100003]; int main() { scanf("%d%d",&n,&L); for(int i = 1;i <= n;i++) { scanf("%lf",&a[i]); } double x = 1e-5;//表示精度为10^-5 double l = -1e6,r = 1e6; while(r - l > x) {