oj

LeetCode OJ 题解

删除回忆录丶 提交于 2020-01-03 09:09:31
博客搬至 blog.csgrandeur.com ,cnblogs不再更新。 新的题解会更新在 新博客 : http://blog.csgrandeur.com/3/ ———————————————————————————————————————— ———————————————————————————————————————— LeetCode OJ 题解 LeetCode OJ is a platform for preparing technical coding interviews. LeetCode OJ 是为与写代码有关的技术工作面试者设计的训练平台。 LeetCode OJ: http://oj.leetcode.com/ 默认题目顺序为题目添加时间倒叙,本文题解顺序与OJ题目顺序一致(OJ会更新,至少目前一致。。。),目前共152题。 Made By: CSGrandeur 另外, Vimer 做了Python版的题解: http://c4fun.cn/blog/2014/03/20/leetcode-solution-02/ ———————————————————————————————————————— Maximum Product Subarray 维护当前位置连续乘积的最大值 tmpp 和最小值 tmpn ,最大值和最小值都可能由三种情况得到:上一个数的

林大OJ习题 2020年1月2日

回眸只為那壹抹淺笑 提交于 2020-01-03 05:14:53
林大OJ 572 密码箱 # include <iostream> # include <bits/stdc++.h> using namespace std ; int main ( ) { int n ; while ( scanf ( "%d" , & n ) != EOF ) { for ( n = n + 1 ; n < 1000 ; n ++ ) { if ( n < 10 ) { printf ( "00%d\n" , n ) ; } if ( n < 100 && n >= 10 ) { printf ( "0%d\n" , n ) ; } if ( n >= 100 ) { printf ( "%d\n" , n ) ; } } } return 0 ; } Copyright © 2012 - 2017 陈宇 来源: CSDN 作者: neuer_yao 链接: https://blog.csdn.net/neuer_yao/article/details/103809042

OJ系统

淺唱寂寞╮ 提交于 2020-01-02 08:48:20
转自: https://blog.csdn.net/qq_31877249/article/details/83027377 转载出处: 学习笔记 什么是OJ Online Judge系统(简称OJ)是一个在线的判题系统。用户可以在线提交程序源代码,系统对源代码进行编译和执行,并通过预先设计的测试数据来检验程序源代码的正确性。 一个用户提交的程序在Online Judge系统下执行时将受到比较严格的限制,包括运行时间限制,内存使用限制和安全限制等。用户程序执行的结果将被Online Judge系统捕捉并保存,然后再转交给一个裁判程序。该裁判程序或者比较用户程序的输出数据和标准输出样例的差别,或者检验用户程序的输出数据是否满足 一定的逻辑条件。 Online Judge系统最初使用于ACM-ICPC国际大学生程序设计竞赛和OI信息学奥林匹克竞赛中的自动判题和排名。现广泛应用于世界各地高校学生程序设计的训练、参赛队员的训练和选拔、各种程序设计竞赛以及数据结构和算法的学习和作业的自动提交判断中。 Pending &Waiting: 系统忙,你的答案在排队等待. Pending Rejudge: 因为数据更新或其他原因,系统将重新判你的答案. Compiling : 正在编译. Running & Judging: 正在运行和判断. Presentation Error : 答案基本正确

LeetCode OJ 1. Two Sum

China☆狼群 提交于 2019-12-30 22:55:18
Given an array of integers, return indices of the two numbers such that they add up to a specific target. You may assume that each input would have exactly one solution. Example: Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1]. UPDATE (2016/2/13): The return format had been changed to zero-based indices. Please read the above updated description carefully. 【问题分析】 kSUM系列的问题有好多个,如下: 我们对这几个题目分别分析并进行总结。 【思路】 1. Two Sum 解决这个问题可以直接利用两层循环对数组进行遍历,这样的时间复杂度为O(N 2 )。一个巧妙的办法是利用java中的HashMap来解决这个问题,代码如下: 1 public class Solution { 2 public int[] twoSum(int[]

light oj 1336 sigma function

流过昼夜 提交于 2019-12-29 07:40:08
常用的化简方法(高中就常用了): p^(e+1)-1/p-1= [ p^(e+1) -p + (p-1) ]/ (p-1) = p*(p^e-1)/(p-1) + 1 (也可以直接分解p^e-1) 常用的思路:反面验证 比如本题,求偶数(试探后发现不太好求),则推出奇数条件 再看本题。要想让σ(n)为偶数,只要有一项 为偶数即可, 化简变为 ,观察这个式子,pi都是素数,除2以外都是奇数,所以式子奇偶决定于ei,若ei为奇数,就相当于奇数个奇数(若pi不是2,那么 肯定是奇数)相加,再加上1,偶数,反之,若ei为偶数,就是奇数。如果pi刚好是2,是奇数 得出结论:对于n,若将n进行唯一分解之后,如果存在任何一个 pi != 2 且 ei ( 1 <= i <= k )为奇数则 σ(n) 为偶数。 现在需要求的是计算1-n之间能让σ(k)为偶数的k的个数。有些复杂,所以考虑这个问题的反面,求1-n之间能让σ(k)为奇数的k的个数 若σ(n)为奇数,则每一项 都必须为奇数,意味着每一项约分之后的 都必须为奇数,也就是说每一项的ei都必须是偶数, 也就是说n必须为平方数。 但是前面证明过当pi为2时,无论ei是什么,这一项都是奇数,然而这些平方数乘以2之后,其σ仍是奇数(如果再乘以2,就是另一个平方数了,所以只需要考虑乘一个2),仍然符合条件。 所以n为平方数,或为平方数的2倍,那么σ

杭电HDU OJ 2045题题解

旧时模样 提交于 2019-12-28 20:32:47
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2045 不容易系列之(3)—— LELE的RPG难题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Problem Description 人称“AC女之杀手”的超级偶像LELE最近忽然玩起了深沉,这可急坏了众多“Cole”(LELE的粉丝,即"可乐"),经过多方打探,某资深Cole终于知道了原因,原来,LELE最近研究起了著名的RPG难题: 有排成一行的n个方格,用红(Red)、粉(Pink)、绿(Green)三色涂每个格子,每格涂一色,要求任何相邻的方格不能同色,且首尾两格也不同色.求全部的满足要求的涂法. 以上就是著名的RPG难题. 如果你是Cole,我想你一定会想尽办法帮助LELE解决这个问题的;如果不是,看在众多漂亮的痛不欲生的Cole女的面子上,你也不会袖手旁观吧? Input 输入数据包含多个测试实例,每个测试实例占一行,由一个整数N组成,(0<n<=50)。 Output 对于每个测试实例,请输出全部的满足要求的涂法,每个实例的输出占一行。 Sample Input 1 2 Sample Output 3 6 Author lcy Source

Comet OJ - Contest #8题解

狂风中的少年 提交于 2019-12-27 17:50:08
传送门 \(A\) 咕咕咕 const int N=1005; char s[N][N];int len[N],n,id; inline bool cmp(R int j,R int k){ R int l=min(len[j],len[k]); fp(i,1,l)if(s[j][i]!=s[k][i])return s[j][i]<s[k][i]; return len[j]<len[k]; } int main(){ scanf("%d",&n),id=1; fp(i,1,n)scanf("%s",s[i]+1),len[i]=strlen(s[i]+1); fp(i,1,n)if(cmp(i,id))id=i; printf("%s\n",s[id]+1); return 0; } \(B\) 咕咕 const int N=1e5+5; typedef long long ll; int a[N],n;ll sum,sp,res; int main(){ scanf("%d",&n); fp(i,1,n)scanf("%d",&a[i]),sum+=a[i],sp+=1ll*a[i]*a[i]; fp(i,1,n)printf("%lld ",sp+1ll*n*a[i]*a[i]-(sum*a[i]<<1)); return 0; } \(C\) 首先把所有的 \(p_i=b

Light OJ 1089 Points in Segments (II)

醉酒当歌 提交于 2019-12-26 18:19:43
http://www.lightoj.com/volume_showproblem.php?problem=1089 题意很简单,就是给出一些线段和一些点,求每个点被覆盖的次数。做的时候,二分写烂了,一直超时。晕~~~ AC Code 1 #include <cstdio> 2 #include <algorithm> 3 using namespace std; 4 #define lson l,m,rt<<1 5 #define rson m+1,r,rt<<1|1 6 #define maxn 50005 7 struct node{ 8 int cnt; 9 }setree[maxn<<2]; 10 struct op{ 11 int l,r; 12 }mes[maxn]; 13 int sorted[maxn],num[maxn]; 14 void build(int l,int r,int rt) 15 { 16 setree[rt].cnt=0; 17 if(l==r) 18 return; 19 int m=(l+r)>>1; 20 build(lson); 21 build(rson); 22 } 23 int binsearch1(int l,int r,int num) 24 { 25 int m=(l+r)>>1; 26 if(sorted[m-1]<num

[OJ#39]左手右手

风流意气都作罢 提交于 2019-12-26 17:41:21
[OJ#39]左手右手 试题描述 有 n 个人,每个人左右手上各写着一个整数。对于编号为 a 的人和编号为 b 的人, a 对 b 的好感度等于 a 左手上写的数字乘 b 右手上写的数字, a 和 b 的好感度差异等于 a 对 b 的好感度与 b 对 a 的好感度之差的绝对值。 现在,你要从这 n 个人中找出两个人使得他们的好感度差异最大。 输入 第一行一个整数 n 。 接下来 n 行,每行两个整数 a i , b i ,分别表示第 i 个人左右手上写的数字。 输出 输出一个整数表示好感度差异的最大值。 输入示例 5 9 -1 7 8 -2 4 9 -6 3 5 输出示例 114 数据规模及约定 2 ≤ n ≤ 10 5 , − 10 9 ≤ a i , b i ≤ 10 9 题解 首先我们可以发现两个人 i, j 的好感度差异就是两个向量 (a i , b i ) 和 (a j , b j ) 的叉积的绝对值。那么要让这个值最大,就是要选择两个向量使得它们围成的三角形面积最大。 我们不妨先枚举其中一个向量 x ,可以发现与它叉积绝对值最大的向量 y 一定在凸包上。我们做平行于向量 x 的直线,显然如果向量 y 的终点在直线上,这条直线离原点越远越好,所以一定是在凸包上的。 所以我们先处理出凸包,然后把所有向量按照极角排序,用旋转卡壳的方法去做就可以 O(n) 了。

【LeetCode OJ 136】Single Number

风格不统一 提交于 2019-12-26 02:13:06
题目链接: https://leetcode.com/problems/single-number/ 题目: Given an array of integers, every element appears twice except for one. Find that single one. Note: Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory? 解题思路:题意为:给定一个数组。仅仅有一个元素出现了一次。其他元素都出现了两次,找出那个仅仅出现一次的数。 能够遍历数组。分别进行异或运算。 注:异或运算: 同样为0,不同为1。遍历并异或的结果就是那个仅仅出现了一次的数。 演示样例代码: public class Solution { public int singleNumber(int[] nums) { int result=nums[0]; for (int i = 1; i < nums.length; i++) { result^=nums[i]; } return result; } } 来源: https://www.cnblogs.com/claireyuancy/p/7064462.html