oj

<每日 1 OJ> -LeetCode 28. 实现 strStr()

梦想与她 提交于 2019-11-27 22:31:26
题目: 实现 strStr() 函数。 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。 示例 1: 输入: haystack = "hello", needle = "ll" 输出: 2 示例 2: 输入: haystack = "aaaaa", needle = "bba" 输出: -1 说明: 当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。 对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。 思路: 此处是C的实现,需要用到3个指针 /** 输入: haystack = "hello", needle = "ll" 1.使用双指针,指针i指向haystack的开始位置,指针j指向needle的开始位置 2.初始i=0,j=0,t=0。haystack[i]=h,needle[l]=l。以haystack串作为外循环 3.第一次循环判断,haystack[i]&&needle[j]有值满足条件,进入第一次循环 做判断haystack[i]=h等于needle[l]=l不成立,t=t+1=1,i=1,j=0 4

台州 OJ 3847 Mowing the Lawn 线性DP 单调队列

谁说胖子不能爱 提交于 2019-11-27 18:10:08
描述 After winning the annual town competition for best lawn a year ago, Farmer John has grown lazy; he has not mowed the lawn since then and thus his lawn has become unruly. However, the competition is once again coming soon, and FJ would like to get his lawn into tiptop shape so that he can claim the title. Unfortunately, FJ has realized that his lawn is so unkempt that he will need to get some of his N (1 <= N <= 100,000) cows, who are lined up in a row and conveniently numbered 1..N, to help him. Some cows are more efficient than others at mowing the lawn; cow i has efficiency E_i (0 <= E_i

CCPC-Wannafly & Comet OJ 夏季欢乐赛(2019)茶颜悦色(扫描线)

自作多情 提交于 2019-11-27 15:50:18
# include <iostream> # include <cstring> # include <cstdio> # include <queue> # include <cstdlib> # include <cmath> # include <stack> # include <map> # include <string> # include <vector> # include <set> # include <bitset> # include <algorithm> using namespace std ; # define ll long long # define INF 0x3f3f3f3f # define LINF 0x3f3f3f3f3f3f3f3f # define ull unsigned long long # define endl '\n' # define clr(a, b) memset(a, b, sizeof(a)) # define lowbit(x) x & -x # define lson rt << 1, l, mid # define rson rt << 1 | 1, mid + 1, r # define PB push_back # define POP pop_back const double pi = acos

CSUST 2012 一个顶俩 (本校OJ题)(思维+树链剖分)

跟風遠走 提交于 2019-11-27 14:01:35
(点击这里查看原题,不保证可以进去....外网可能比较卡) Description A:一心一意 B:一个顶俩 最近QQ更新后那个成语接龙好像挺火的?但我只知道图论里一条边是一个顶俩个点的emm。 如果我给你一个 n个点 n-1 条边的无向联通图,但是这里头有一些边是脆弱的。随时都面临崩坏的危险。 为了维持他们的连通性,善良的我又给了你 m条紫水晶备用边 (u,v) 。我这里准备 Q个问题,第 i 个问题为一个整数 z ( 1 ≤ z ≤ n − 1 ) 表示若第 z条边崩坏了,你能选出多少条备用边保证图继续保持联通。 Input 第一行三个正整数表示 n,m,Q 接下来 n-1 行每行两个整数 x,y 一条边。 下面 m行每行两个整数 u, v表示备用边。 接下来 Q 行,每行一个整数 z表示询问。 1 ≤ n , m , Q ≤ 1 0 0 0 0 0。保证数据合法。 Output Q行,每行一个整数表示答案。 Sample Input 3 2 2 1 2 1 3 2 3 1 3 1 2 Sample Output 1 2 Hint 第一个问题把第1条边(1,2)删掉,你可以选择备用边(2,3)保证连通性。 第二个问题把第2条边(2,3)删掉,你可以随意选择一条备用边都能保证连通性。 题目分析 题意:给出一个有n个结点的树,同时给出m条备用边u,v,有q次询问

3678: wangxz与OJ

喜你入骨 提交于 2019-11-27 10:42:41
Description 某天,wangxz神犇来到了一个信息学在线评测系统(Online Judge)。由于他是一位哲♂学的神犇,所以他不打算做题。他发现这些题 目呈线性排列,被标记为1~n号,每道题都有一个难度值(可以<=0)。他决定与这些题目玩♂耍。 1、他可以在某个位置插♂入一些难度值特定的题目。 2、他可以吃♂掉(删除)一段题目。 3、他可以查询某个位置的题目的难度值。 维护一个初始有n个元素的序列(标记为1~n号元素),支持以下操作: 0 p a b (0<=p<=当前序列元素个数) (a<=b) 在p位置和p+1位置之间插入整数:a,a+1,a+2,...,b-1,b。若p为0,插在序列最前面; 1 a b (1<=a<=b<=当前序列元素个数) 删除a,a+1,a+2,...,b-1,b位置的元素; 2 p (1<=p<=当前序列元素个数) 查询p位置的元素。 Input 输入第一行包括两个正整数n(1<=n<=20000),m(1<=m<=20000),代表初始序列元素个数和操作个数。 接下来n个整数,为初始序列元素。 接下来m行,每行第一个为整数sym, 若sym=0,接下来有一个非负整数p,两个整数a,b; 若sym=1,接下来有两个正整数a,b; 若sym=2,接下来有一个正整数p; p、x、y的含义及范围见题目描述。 在任何情况下

从头开始制作OJ-在线IDE的搭建

浪尽此生 提交于 2019-11-27 09:49:52
大家好,我是Fred913。 之前,我看过各种OJ(OpenJudge) 但是,还是没有自己做的好。 所以,我就来写了这篇教程。 环境 这次,我打算使用这些: PHP 5.6 Nginx/Apache Python Python可以使用命令 For Ubuntu/Debian: apt install python3 -y For CentOS: yum install python3 -y 安装Python 那么,环境安装就结束了 代码部分 刚刚,我们准备好了环境,现在就是代码部分。 因为OJ需要在线运行代码的能力,所以我们在站点根目录下新建一个文件夹:api 在api文件夹里新建一个文件:python.php 代码如下: <?php //Powered By ShengFAN //使用世界上最好的语言PHP进行开发-_- $randint = rand();//为用户的代码取一个随机数作为唯一码 $f = fopen("/tmp/usrcode".$randint.".py", "w"); fwrite($f,$_GET['code']); fclose($f); echo str_replace("\n","<br>",passthru("python3 /tmp/usrcode".$randint.".py 2>&1")); //把换行转为html格式 unlink("

Comet OJ - Contest #8 解题报告

房东的猫 提交于 2019-11-27 08:35:56
传送门: https://www.cometoj.com/contest/58 A:杀手皇后(STL) 题意:给出n个由小写字母组成的字符串,求出字典序最小的那一个。 分析:签到题,用string类的重载运算符 < 可以比较两个字符串的字典序大小。维护一个字典序最小的字符串变量即可得到答案。 1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 int main() { 6 int n; 7 scanf("%d",&n); 8 string ans = ""; 9 ans += char(200); 10 for (int i=0;i<n;i++) { 11 string input; 12 cin >> input; 13 if (input < ans) { 14 ans = input; 15 } 16 } 17 18 cout << ans << endl; 19 20 return 0; 21 } View Code B:支援城市(数学) 题意:有n个点,其值为w。求对于每个点x,求$\sum_{i=1}^{n}$(w i +w x ) 2 。 分析:条件很少,暴力的话O(n 2 )的复杂度会超时,所以剩下能做的事情就是因式分解。通过分析分解后的式子我们可以得到对于每个点x,其答案都会等于n*w x 2 + $

杭电OJ | 2054 A==B if 判断语句 strchr函数

廉价感情. 提交于 2019-11-27 07:18:25
笔记 : 1. strchr函数 <string.h>头文件 char *strchr(const char *str, int c) //str字符串中c字符的第一次出现的位置,如果未找到返回NULL 2. if(条件语句) 条件语句运算结果不是0则执行if语句块 2054 Problem Description Give you two numbers A and B, if A is equal to B, you should print "YES", or print "NO". Input each test case contains two numbers A and B. Output for each case, if A is equal to B, you should print "YES", or print "NO". Sample Input 1 2 Sample Output NO #include<stdio.h> #include<string.h> void delzero(char a[]); int main() { char a[100000],b[100000]; //数组要大一些,不然会Runtime Error(ACCESS_VIOLATION) while(scanf("%s %s",&a,&b)!=EOF){ delzero

Comet OJ - Contest #7 解题报告

徘徊边缘 提交于 2019-11-27 05:44:23
传送门: https://www.cometoj.com/contest/52 A:签到题 题意:多次询问,每次询问给出一个值域区间[l,r],从这区间范围中选出两个整数(可重复),依次求出这俩数的“最大的最小公倍数”、“最小的最小公倍数”、“最大的最大公约数”、最小的最大公约数。 分析:(1)显然,当区间长度为1时,该问题的答案只能是区间中仅有的那个数。    (2)当区间的长度大于1时,最大的最小公倍数,lcm max =lcm(a r ,a r-1 ) = a r * a r-1;                 最小的最小公倍数,lcm min = lcm(a l ,a l ) = a l;                 最大的最大公约数,gcd max = gcd(a r ,a r ) = a r;                 最小的最大公约数,gcd min = gcd(a r ,a r-1 ) = 1; 1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 int main() { 6 int t; 7 scanf("%d",&t); 8 while (t--) { 9 int l,r; 10 scanf("%d%d",&l,&r); 11 12 if (l == r) { 13 printf("%d

Comet OJ - Contest #11 B 背包dp

ぐ巨炮叔叔 提交于 2019-11-27 05:13:03
Code: #include <bits/stdc++.h> #define N 1005 #define M 2000 #define setIO(s) freopen(s".in","r",stdin) using namespace std; int A[N],B[N],w[M+3],f[M+3]; int main() { // setIO("input"); int n,m,k,i,j,ans=0; scanf("%d%d%d",&n,&m,&k); for(i=0;i<=k;++i) scanf("%d",&w[i]); for(i=1;i<=m;++i) scanf("%d%d",&A[i],&B[i]); memset(f,-1,sizeof(f)); f[0]=0; for(i=1;i<=n;++i) { for(j=M;j>=0;--j) { if(f[j]==-1) continue; for(int tmp=1;tmp<=m;++tmp) { if(j>=A[tmp]) f[j-A[tmp]]=max(f[j-A[tmp]], f[j]+B[tmp]); } } if(i!=n) { for(j=M;j>=0;--j) { if(f[j]==-1) continue; f[j+w[j]]=max(f[j+w[j]], f[j]); } } } for(j=0