上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 19 下一页

2013年4月19日

POJ24810 - Cows

摘要: 题目大意 给定N对二元组(s,e),对于第i对二元组(s[i],e[i]),在前1~i-1对二元组中计算出符合这样要求的二元组(s[j],e[j])的总数量,s[j]<=s[i],e[j]>=e[i],并且e[j]-s[j]>e[i]-s[i]。 题解 先按e降序排序,如果e相等则按s升序排序,这样处理之后,接下来就和POJ2352的stars的处理是一样的,对于第i个数,只要小于a[i].s的数... 阅读全文

posted @ 2013-04-19 21:41 仗剑奔走天涯 阅读(161) 评论(0) 推荐(0) 编辑

HDU1556 - Color the ball

摘要: 题目大意给定区间[1,N],初始时区间的每个数都是0,对其进行多次操作,每次给出两个数a和b,要求你对在区间[a,b]的数全部加1,在操作结束后输出每个数的值题解最基础的树状数组了,就是修改区间[a,b]的值,询问单个元素的值代码:#include<iostream>#include<cstring>#include<cstdio>#define MAXN 100005using namespace std;int c[MAXN];int n;int lowbit(int x){ return x&-x;}void add(int x,int d){ 阅读全文

posted @ 2013-04-19 20:19 仗剑奔走天涯 阅读(179) 评论(0) 推荐(0) 编辑

UVa12086 - Potentiometers

摘要: 题目大意给定n个数,你的任务是实现如下两种操作:“S x y“ 把第x个数修改为y“M x y”计算第X个数到第Y个数之和题解这刚好是树状数组的功能,修改元素的值和求区间和代码#include<iostream>#include<cstdio>#include<cstring>#include<string>#define MAXN 200005using namespace std;int n;int c[MAXN];int lowbit(int x){ return x&-x;}void add(int x,int d){ while 阅读全文

posted @ 2013-04-19 20:08 仗剑奔走天涯 阅读(328) 评论(0) 推荐(0) 编辑

2013年4月17日

POJ2352 - Stars

摘要: 题目大意 按纵坐标升序给定N颗星星的坐标(x[i],y[i]),计算出每个等级的星星有多少,对于等级是这样定义的:对于第i颗星星,计算出1~i-1颗星星中横坐标和纵坐标都比第i颗星星小的数量ans,那么ans就是此颗星星的等级。 题解 很经典的树状数组入门题目,直接看代码吧,不过有一个地方要注意,就是横坐标为0的情况,如果在更新的时候循环用的是while(x<=MAXS),对于x=0的情况,会无限... 阅读全文

posted @ 2013-04-17 15:48 仗剑奔走天涯 阅读(272) 评论(0) 推荐(0) 编辑

SGU180 - Inversions

摘要: 题目大意给定N个数,a1,a2,3,a4..an,要求你求出这样的对数:i<=i<j<=n并且a[i]>a[j]。题解就是逆序对问题。。。果断用树状数组做,数据有点大0<=Ai<=10^9,需要进行离散化,离散的时候注意会有相同的数,最先没注意这个,提交上去第二组数据就WA了。代码#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#define MAXN 70000using namespace std;typedef s 阅读全文

posted @ 2013-04-17 15:23 仗剑奔走天涯 阅读(409) 评论(0) 推荐(0) 编辑

POJ - Ultra-QuickSort

摘要: 题目大意 给定N个数(没有相同的值),对N个数进行升序排序,每次只能交换相邻的两个数,问最少需要多少次交换才能够让N个数成为升序排列的 题解 就是逆序对问题,如果a[i]>a[j](i<j)则就是一个逆序对,此题可以用归并排序解决,也可以树状数组,不过我是当树状数组来练习的。此题数据有点大0 ≤ a[i] ≤ 999,999,999,所以需要把N个数进行离散化,因为我们对每个数的值并不感兴趣,只需... 阅读全文

posted @ 2013-04-17 15:10 仗剑奔走天涯 阅读(191) 评论(0) 推荐(0) 编辑

POJ3928 - Ping pong

摘要: 题目大意一条大街上从西到东依次住着N个乒乓球爱好者,他们经常举办比赛。每个人都有一个不同的技能值a[i]。每场比赛需要三个人,一个裁判加两个爱好者,不过比赛有一个要求就是裁判的技能值需要在两个爱好者的中间,并且居住的位置也要求在两个爱好者的中间,问总共能够举办多少场比赛。题解LRJ《训练指南》上树状数组的例题,我们枚举每一个人当裁判的情况,对于第i个人当裁判,假设a[1]到a[i-1]有pre[i]个比a[i]小,那就有i-1-pre[i]个人比大。同样假设a[i+1]到a[n]有suc[i]个比a[i]小,则有n-i+1-suc[i]个人比a[i]大,那么第i个人当裁判将有pre[i]*(n 阅读全文

posted @ 2013-04-17 14:54 仗剑奔走天涯 阅读(343) 评论(0) 推荐(0) 编辑

2013年4月16日

树状数组专题

摘要: 树状数组练习题目 阅读全文

posted @ 2013-04-16 14:06 仗剑奔走天涯 阅读(125) 评论(0) 推荐(0) 编辑

2013年4月15日

UVa10624 - Super Number

摘要: 题目大意给定两个数n和m,如果长度为m的数满足对于每个i(n<=i<=m),数字的前i位都能被i整除,那么这个数就是超级数,求出字典序最小的符合要求的超级数。题解直接暴力就行,如果每次进行整除判断的时候,对当前数每位都进行取余运算,那么将会超时,因此每18位进行一次取余(long long的数据范围为:-9223372036854775808..9223372036854775807,这样在1S左右就可以AC了。#include<iostream>#include<cstdio>#include<string>using namespace st 阅读全文

posted @ 2013-04-15 13:23 仗剑奔走天涯 阅读(147) 评论(0) 推荐(0) 编辑

2013年4月14日

UVa10120 - Gift?!

摘要: 题目大意美丽的村庄里有一条河,N个石头被放置在一条直线上,从左岸到右岸编号依次为1,2,...N。两个相邻的石头之间恰好是一米,左岸到第一个石头的距离也是一米,第N个石头到右岸同样是一米。礼物被放置在第M个石头上,Frank从左岸开始跳跃,对于第i步,必须跳2*i-1米,每次可以向左方向跳,也可以向右方向跳,跳到河岸跳跃就结束了,问Frank能否拿到礼物。题解每次跳跃有两种选择,向右或者向左,用搜索非常的好实现,只是2<=N<=10^6必须得跪。。。实在想不出怎么优化。。。看了下网上的题解,当N>=49一定能跳跃到M的位置上,直接输答案即可。。。即N<49用搜索,N&g 阅读全文

posted @ 2013-04-14 00:34 仗剑奔走天涯 阅读(275) 评论(0) 推荐(0) 编辑

2013年4月13日

UVa10396 - Vampire Numbers

摘要: 题目大意如果一个数为n=x*y,符合以下要求:1、n为偶数,位数L为4或者6或者82、x和y的位数都为L/23、x和y两个数字连接在一起,然后进行重排可以得到n4、x和y两者的尾数不能同时为0找出所有满足上述条件的数字。题解果断暴力搜索,先进行预先计算(和打表差不多了。。),把n等于4和6以及8的符合的数字计算出来并存储好,我们用set容器来存储,如果用vector容器的话,输出顺序将不是有序的,因此我们选择set容器。刚开始我是用sprintf函数把数字转化成字符串,然后在进行相应的操作的,提交上去的时间异常恐怖啊17.237S。。。然后没用这个函数之后。。时间少了好多。。。只要2.748S 阅读全文

posted @ 2013-04-13 23:50 仗剑奔走天涯 阅读(244) 评论(0) 推荐(0) 编辑

2013年4月8日

UVa10602 - Editor Nottoobad

摘要: 题目大意给定N个单词,要求你用Nottoobad编辑器进行输入,如果你当前需要输入的单词与之前一个已经输入的单词有公共部分,那么这公共部分是不需要输入的,只需要粘贴复制即可,第一个单词必须全部输入,其他的单词可以按任意顺序输入,要求你安排一个输入顺序,使得输入操作的次数最少。题解一个很简单的贪心,每次输入选择与前一个输入的单词的公共部分长度最长的单词即可,如果公共部分为0,则输入任意一个单词都行。#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAXN 105int f[MAXN];c 阅读全文

posted @ 2013-04-08 14:58 仗剑奔走天涯 阅读(206) 评论(0) 推荐(0) 编辑

UVa1419 - Ugly Windows

摘要: 题目大意给定一个长为N,宽为M的屏幕,屏幕上有一些窗口,窗口之间有一些重叠,求出在最顶端的窗口。题解就是一个很简单的模拟,不过有一个坑爹的地方,那就是窗口的嵌套,例如这样的数据5 5AAAAAABBBAAB. BAABBBAAAAAA答案是B,而我刚开始写的代码会输出AB,因为我只是判断是否为完整的矩形。即如果是最顶端的窗口,那么它的内部应该全部是'.'。#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAXN 105int visit[MAXN][MAXN];int 阅读全文

posted @ 2013-04-08 01:25 仗剑奔走天涯 阅读(208) 评论(0) 推荐(0) 编辑

2013年4月6日

四月份计划

摘要: 大概在三月中旬的时候hlm学长和我说集训队有人退出了,因此添加需要一名新队员,三月份月赛的第一名将入选。听到这个消息着实让我高兴了一阵子。之后半个月就很少出门了,除了上课基本呆寝室刷题,虽然效率不高,但还是刷了一定数量的题目,月赛也顺利的拿到第一名了,第二天下午hlm学长就通知我进队了,要我把电脑搬到实验室去,听到这个消息让我激动的跳起来了,真的很高兴,由于寝室五个人都有电脑,听得听歌,玩的玩游戏,看的看电影,整个寝室闹哄哄的,根本搞不了什么学习,因此一直希望有个安静的学习环境,这次终于实现了。不过搬过去的几天状态似乎都不好,由于每天上午都有课,所以基本是吃完中饭去的,整个下午基本都是脑... 阅读全文

posted @ 2013-04-06 02:38 仗剑奔走天涯 阅读(186) 评论(0) 推荐(0) 编辑

UVa1316 - Supermarket

摘要: 题目大意有N个物品,每个物品在都有一个截止日期,如果在截止日期之前(包括截止日期)卖出将会获得相应的利润,卖出物品需要一个单位时间,问最多能获得多少利润?题解和UVa1153的解题思路是一样的,用优先队列来维护(小根堆),先让物品按截止时间升序排序,设ans为已选择物品需花费的总时间(等于优先队列的元素个数),那么对于某个物品如果它的截止日期大于ans,则加入优先队列,如果小于或者等于ans,再判断它的利润是否大于优先队列中利润最低的那个物品的利润,如果大的话,用这个物品替换优先队列中利润最低的那个物品,用截止时间长利润大的物品替换截止时间短利润小的物品肯定是更优的选择。#include< 阅读全文

posted @ 2013-04-06 01:29 仗剑奔走天涯 阅读(342) 评论(0) 推荐(0) 编辑

上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 19 下一页

导航