- 博客(47)
- 资源 (3)
- 收藏
- 关注
原创 maximum-depth-of-binary-tree
http://www.lintcode.com/zh-cn/problem/maximum-depth-of-binary-tree/http://www.jiuzhang.com/solutions/maximum-depth-of-binary-tree/描述:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的距离。样例给出一棵如下的二叉树
2016-11-05 02:54:06
354
原创 search-for-a-range
http://www.lintcode.com/zh-cn/problem/search-for-a-range/http://www.jiuzhang.com/solutions/search-for-a-range/描述:给定一个包含 n 个整数的排序数组,找出给定目标值 target 的起始和结束位置。如果目标值不在数组中,则返回[-1, -1]样例给出[
2016-11-05 02:53:14
473
原创 search-in-rotated-sorted-array
http://www.lintcode.com/zh-cn/problem/search-in-rotated-sorted-array/http://www.jiuzhang.com/solutions/search-in-rotated-sorted-array/描述:假设有一个排序的按未知的旋转轴旋转的数组(比如,0 1 2 4 5 6 7 可能成为4 5 6 7 0 1 2
2016-11-05 02:52:37
346
原创 first-bad-version
http://www.lintcode.com/zh-cn/problem/first-bad-version/http://www.jiuzhang.com/solutions/first-bad-version/描述:代码库的版本号是从 1 到 n 的整数。某一天,有人提交了错误版本的代码,因此造成自身及之后版本的代码在单元测试中均出错。请找出第一个错误的版本号。你可以
2016-11-05 02:51:59
237
原创 find-peak-element
http://www.lintcode.com/zh-cn/problem/find-peak-element/http://www.jiuzhang.com/solutions/find-peak-element/描述:你给出一个整数数组(size为n),其具有以下特点:相邻位置的数字是不同的A[0] A[n - 1]假定P是峰值的位置则满足A[P] > A[P
2016-11-05 02:51:19
265
原创 find-minimum-in-rotated-sorted-array
http://www.lintcode.com/zh-cn/problem/find-minimum-in-rotated-sorted-array/http://www.jiuzhang.com/solutions/find-minimum-in-rotated-sorted-array/描述:假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4
2016-11-05 02:50:44
257
原创 wood-cut
http://www.lintcode.com/zh-cn/problem/wood-cut/http://www.jiuzhang.com/solutions/wood-cut/描述:有一些原木,现在想把这些木头切割成一些长度相同的小段木头,需要得到的小段的数目至少为 k。当然,我们希望得到的小段越长越好,你需要计算能够得到的小段木头的最大长度。 注意事项木头长度的单位是
2016-11-05 02:49:56
400
原创 search-in-a-big-sorted-array
http://www.lintcode.com/zh-cn/problem/search-in-a-big-sorted-array/http://www.jiuzhang.com/solutions/search-in-a-big-sorted-array/描述:给一个按照升序排序的正整数数组。这个数组很大以至于你只能通过固定的接口 ArrayReader.get(k) 来访问第
2016-11-05 02:49:01
323
原创 first-position-of-target
http://www.lintcode.com/zh-cn/problem/first-position-of-target/http://www.jiuzhang.com/solutions/first-position-of-target/描述:给定一个排序的整数数组(升序)和一个要查找的整数target,用O(logn)的时间查找到target第一次出现的下标(从0开始),如
2016-11-05 02:48:15
379
原创 search-a-2d-matrix
http://www.lintcode.com/zh-cn/problem/search-a-2d-matrix/http://www.jiuzhang.com/solutions/search-a-2d-matrix/描述:写出一个高效的算法来搜索 m × n矩阵中的值。这个矩阵具有以下特性:每行中的整数从左到右是排序的。每行的第一个数大于上一行的最后一个整数
2016-11-05 02:47:44
223
原创 search-insert-position
http://www.lintcode.com/zh-cn/problem/search-insert-position/http://www.jiuzhang.com/solutions/search-insert-position/描述:给定一个排序数组和一个目标值,如果在数组中找到目标值则返回索引。如果没有,返回到它将会被按顺序插入的位置。你可以假设在数组中无重复元素
2016-11-05 02:47:01
246
原创 last-position-of-target
http://www.jiuzhang.com/solutions/last-position-of-target/http://www.lintcode.com/zh-cn/problem/last-position-of-target/描述:给一个升序数组,找到target最后一次出现的位置,如果没出现过返回-1样例给出 [1, 2, 2, 4, 5, 5].t
2016-11-05 02:46:04
443
原创 strStr
这道题首先要判断非空,因为如果为空直接调用的话会报错。class Solution: def strStr(self, source, target): if source is None or target is None: # 这里首先要判断source和target是否为空,如果为空的话就直接返回-1 return -1 r
2016-11-05 02:44:56
280
原创 NOI第一天感想&小结
嘛。。。中午总算是到了深圳了……在虹桥机场和飞机上和市队大神们一起讨论各种各样奇(sang)葩(bing)的算(ren)法(lei)还是很开心的,在此再各种膜拜一下虽然没来比赛的FFT大神@陈中瑞 orz orz orz …… 飞机起飞得很准时,而且飞机上的面包好好吃(好吧当时我早饭没吃)!在飞机上讨论起@朱宏祺 立了AC所有计算几何题目的flag之后果断开始YY各种计算几何题目给他
2014-07-25 23:21:01
1213
原创 USACO 2007 Dec Gourmet Grazers 挑剔的美食家
挑剔的美食家约翰的奶牛对食物越来越挑剔了。现在,商店有M 份牧草可供出售,奶牛食量很大,每份牧草仅能供一头奶牛食用。第i 份牧草的价格为Pi,口感为Qi。约翰一共有N 头奶牛,他要为每头奶牛订购一份牧草,第i 头奶牛要求它的牧草价格不低于Ai,口感不低于Bi。请问,约翰应该如何为每头奶牛选择牧草,才能让他花的钱最少?输入格式• 第一行:两个整数N 和M,1 ≤ N ≤
2014-04-04 23:09:24
825
原创 USACO 2009 Mar Look Up 向右看齐
#include#includeint h[1000001];int high[1000001];int cout[1000001];int main(){ int n; freopen("lookup.out","w",stdout); freopen("lookup.in","r",stdin); scanf("%d\n",&n); for(int i=1;i<=n;i+
2014-03-02 14:29:20
1308
原创 USACO 2011 Feb Best Parenthesis 括号序列
#include#includeusing namespace std;int main(void){ ifstream fin("paren.in"); ofstream fou("paren.out"); int n; long long int xulie[100001]={0}; long long int score=0; fin>>n; int i; int c
2014-03-02 14:28:00
1299
原创 USACO 2005 Nov Cow Acrobats 奶牛杂技
#include#include#includeint n,s[50001],w[50001],sw[50001];void swap(int *a,int *b){ int temp; temp=*a; *a=*b; *b=temp;}void sort(int l,int r){ int key=sw[rand()%(r-l+1)+l]; int i=l,j=r;
2014-03-02 14:26:32
1680
原创 USACO 2009 Dec Bobsledding 滑雪比赛
#include#includeconst int maxn=100003;int n,l;int t[maxn],s[maxn];long long int f[maxn],max;int min(int a,int b){ return a<b?a:b;}void swap(int *a,int *b){ int tmp=*a; *a=*b; *b=tmp;
2014-03-02 14:23:31
1388
原创 USACO 1997 FALL Big Barn 方形牛棚
#includeint n,m,x,y,f[1001][1001];bool a[1001][1001];int check(int x,int y,int k){ if(x+k>n||y+k>n) return k-1; for(int i=x;i<=x+k;i++) { if(a[i][y+k]) return k-1; } for(int i=y;i<=y+k
2014-03-02 14:21:50
841
原创 wikioi 3143 二叉树的序遍历
#include#define L 1#define R 2int son[17][3],n;void f(int n){ printf("%d ",n); if(son[n][L]) f(son[n][L]); if(son[n][R]) f(son[n][R]);}void m(int n){ if(son[n][L])
2014-02-18 14:54:06
1281
原创 wikioi 3145 汉诺塔游戏
#includeint f[11];int getint(){ int n; scanf("%d",&n); return n;}void move(int n,char s,char d,char m){ if(n==1) printf("%d from %c to %c\n",n,s,d); else { move(n-1,s,m,d); printf("%
2014-02-18 14:53:21
1076
原创 wikioi 3285 转圈游戏
哎,noipD1T1。记得开int64,用快速幂。这道题的数学结论就不推理了,相信大家都能通过找规律找出来。#include int n,m,k,x,ans;long long int t,tmp;int main(){ scanf("%d%d%d%d",&n,&m,&k,&x); t=1; tmp=10; int turn; if(n%m==0) { t
2014-02-18 14:52:21
863
原创 wikioi 3299 有序数组合并求第K大问题
不必开3个数组,两个够了。#includeint n,m,k;int a[1000001],b[1000001];int main(){ scanf("%d%d%d",&n,&m,&k); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=m;i++) scanf("%d
2014-02-18 14:49:48
625
原创 wikioi 2800 送外卖
其实就是TSP问题。用状态压缩型动态规划#includeconst int MAXN=15;const int INF=1<<30;int n;int d[MAXN+1][MAXN+1];int f[1<<(MAXN+1)][MAXN+1];int ans;int getint(void){ int a; scanf("%d",&a); return a;}
2014-02-15 14:25:19
963
原创 USACO 2008 Feb Hotel 预订旅馆
使用线段树的数据结构。每个节点存3个信息:pre->这个节点维护区间的左端点连续空的房间数suf->这个节点维护区间的右端点连续空的房间数len->这个节点维护区间的最长连续空的房间数update为更新父节点信息download为下标下放(flag更新)#includeconst int MAXN=50000;const int MAXM=50000;const i
2014-02-08 13:32:49
1521
转载 如何用各种编程语言杀死一条龙
这篇有趣的文章编译自一篇西班牙博客。 有一位美丽的公主,被关押在一个城堡中最高的塔上,一条凶恶的巨龙看守着她,需要有一位勇士营救她…… 下面是各种语言如何想办法将公主从巨龙手中营救出来的。 Java - 赶到那里,找到巨龙,开发出一套由多个功能层组成的恶龙歼灭框架,写几篇关于这种框架的文章…但巨龙并没有被消灭掉。 .NET - 赶到哪里,看到
2014-02-05 23:08:07
684
原创 USACO 2004 Nov Apple Catching 接住苹果
f[i][j]表示第i个苹果掉下来时贝西一共移动了j次所接到的最多的苹果数。根据移动次数能判别贝西在哪个苹果树下。#includeint n,k,f[1001][31],t[1001],ans;int max(int a,int b){ return a>b?a:b;}int main(){ freopen("bcatch.in","r",stdin); freopen(
2014-02-05 00:24:34
1819
原创 USACO 2011 Jan Profits 公司利润
动态规划的水题,不多说了。#includeint n,p,f[100001],max;int main(){ freopen("profits.in","r",stdin); freopen("profits.out","w",stdout); scanf("%d",&n); for(int i=1;i<=n;i++) { scanf("%d",&p); f[i]=p>
2014-02-05 00:22:23
1084
原创 USACO 2004 OPEN Moofest 奶牛集会
先按照坐标x进行排序,随后用归并排序对v进行排序。用部分和去求总和。#include#includeconst int maxn=20002;int v[maxn],x[maxn],n;int b[maxn],c[maxn];long long int ans;void swap(int *a,int *b){ int tmp=*a; *a=*b; *b=tmp;}vo
2014-02-05 00:19:33
1267
原创 USACO 2012 Mar Haybale Restacking 重排干草
假设对于所有位置都只从其左边一个位置搬运干草过去,则可设ab[i]为i号位接收到的干草数量。ab[i]=a[i-1]-b[i-1]+ab[i-1];根据ab[i]排序。这里要采用快速排序,不然超时。ps:这个程序用不到long long int。不知道为啥当时也许是本博主脑抽了都写了long long int。#include#include#includelong long
2014-02-05 00:16:59
1653
原创 USACO 2009 Feb Cruel Math Teacher 数的幂次
快速幂,不多说了。#include#includeint a[15001],b[15001],c[15001],n,p;void copy(int c[],int a[]){ for(int i=0;i<=c[0];i++) a[i]=c[i];}void mutil(int a[],int b[],int c[]){ for(int i=0;i<=a[0]+b[0]
2014-02-05 00:02:56
1064
原创 USACO 2009 Feb Revamping Trails 道路翻新
这道题不妨借用一下动态规划的思路,把一个点拆成k+1(max是20)个点来做,对于所有的点ui分别和vi与vi+1相连。详见代码:#include const int maxn = 10000;const int maxm = 100000;const int INF = maxn * 100000;int n, m, k, s;int p[maxn+1], q[maxn+1
2014-02-05 00:00:19
1220
原创 USACO 2010 Feb Chocolate Giving 领取巧克力
这道题其实就是堆优化的Dijkstra。不用堆优化的话是会超时的。#include#include#define PROBNAME "cgiving"const int MAXN=50000;const int MAXM=100000;const int MAXB=25000;const int INF=2000*MAXN*2+1;int n,m,b;int k,firs
2014-02-04 23:57:22
882
原创 USACO 2007 OPEN Dining 奶牛晚宴
好吧,裸的网络流+拆点。#include#includeconst int MAX=405;int n,f,d,s,t;int map[MAX][MAX],e[MAX][MAX],q[MAX],head,tail,pre[MAX];long long int ans;bool bfs(){ for(int i=0;i<MAX;i++) { pre[i]=0; } he
2014-02-04 23:55:43
827
原创 USACO 2009 Mar Earthquake Damage 2 地震破坏
这道题其实就是网络流,难在建图。应该可以看出,这道题就是求一个最小割。超级源点和超级汇点这个不在赘述,主要的一个就是要把所有点都拆成流入点和流出点,并且权值设为1。而对于与超级源点相连的点,则再加一条流量为正无穷的边,不然在用dinic算法算的时候会直接选择把这几个点切断。#include#includeconst int MAXP=3000*2;const int MAX
2014-02-04 23:53:55
1027
原创 USACO 2005 Nov Asteroids 小行星群
#include#includeconst int MAXN=500;const int MAXM=10000;const int MAX=MAXM*2+MAXN*4+10;const int INF=1;int n,m;int first[MAXN*2+3],k,next[MAX],head[MAX],tail[MAX],c[MAX],s,t;int q[MAXN*2+3],qh
2014-02-04 23:49:03
993
原创 wikioi 3297 木材加工
好吧其实就是基本的二分答案。#includeint n,k,a[100001];int ans,mid,l,r;void check(){ int num=0; for(int i=1;in;i++) { num+=a[i]/mid; } if(num>=k) { ans=mid; l=mi
2014-02-04 23:43:09
660
原创 wikioi 1166 矩阵取数游戏
#include#include#includetypedef structnode{ int a[40];}hugeint;hugeint f[81][81],k1,k2,a[81],max;int n, m;hugeint add(hugeint k,hugeint l){ hugeint j; //if (k.a[0] // return add(l, k)
2014-01-19 17:05:53
628
原创 wikioi 1115 开心的金明
#include#includeint f[30001],v[26],temp,n,vp[26],top,max,m;int main(){ f[0]=1; scanf("%d%d",&n,&m); for(int i=1;i { scanf("%d%d",&v[i],&temp); vp[i]=v[i]*
2014-01-19 17:05:21
556
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人