sicily
文章平均质量分 57
贱走偏锋
朝着梦想努力吧
展开
-
sicily 1195. Summation
用一个数组c[i][j]统计第i位,数字j出现的次数计算数据段[x,y]等价于计算数据段([0,y]-[0,x-1]+m)%m最高位为s[n-1],1---s[n-1]-1个出现M^n-1次,s[n-1]出现x%M^n-1+1次,其余低位各个位置上的每个数字在该位出现s[n-1]*M^n-2次其他位类似。。。。从高往低算。#include#include#include原创 2012-02-06 10:55:18 · 493 阅读 · 0 评论 -
7967. Book Stack
本题的意思就是给你一些不同大小的书,从上往下排列好,给定的排序操作就是选取一本书放在顶部,但是取出来的这本书的上面的书必须是递增的(可以使不严格递增)。然后问总共需要的移动次数。仔细观察,排序的思路是固定的,对于已经是单调的堆,我们不可能去取其中的一本去放在堆顶。因为假设取了一本之后,你会发现还是需要把它放在原来的位置才能继续下面的操作。所以,基本上是每次取单调的最大堆的下个比堆底元素小的元素,把原创 2013-04-19 01:23:42 · 782 阅读 · 0 评论 -
sicily 1023. Funny Contest
很久之前做了,但是弄了好久才弄懂,现在看一下后缀数组又懵了。。。我弱爆了。。题目就是按照后缀数组的倍增算法,因为倍增算法用倍增算法排序后,刚好可以统计这次得到的名次。不过原始的后缀数组不是一个循环的字符串,我们把它改成循环就行了#include#include#include#includeusing namespace std;const int maxn原创 2012-04-20 12:26:16 · 575 阅读 · 0 评论 -
sicily 1225. 电子眼
/////图其实是一个树加了一条边,我们找到这个环,然后枚举其中一条边的两端,看是在哪里安装电子眼。剩下的就是普通的树形dp了。。#include#include#include#includeusing namespace std;const int MAXN = 101000;vector g[MAXN];int p1,p2;////准备删除的边int d原创 2012-03-21 17:10:36 · 651 阅读 · 0 评论 -
sicily 4425Easy Sort
进行一次翻转之后,接下的翻转肯定只交换相邻的数,统计逆序对。用树状数组做,新序列保存在arr中,没读入一个arr[i],就在c[arr[i]]位置加1,这时候arr[i]与之前输入的i个数中构成逆序的就是i-sum(arr[i])拉。。#include#include#include#includeusing namespace std;int arr[110000原创 2012-03-09 19:15:51 · 547 阅读 · 0 评论 -
1423. 魔王bug的2色定理
转换为求最小割#include#include#include#include#includeusing namespace std;const int INF = 10000000;vector path[220];int cap[220][220];int flow[220][220];int a[220];int p[220];int n原创 2012-03-08 21:21:57 · 673 阅读 · 0 评论 -
sicily 4876. PLAĆE 每周一赛二
树形结构转线性结构,先dfs,得到每一个结点的开始和结束访问时间s,t记录一个数组A[1...t]那么更新一个结点的就是A[s]+=v,A[t]-=v采用树状数组做,OMlog2*N复杂度#include#include#include#include#includeusing namespace std;const int N = 1001000;in原创 2012-03-04 10:35:43 · 1019 阅读 · 0 评论 -
sicily 1876. Basic Graph Problem 线段树+并查集+路径压缩
线段树或者RMQ都可以做,虽然是不是动态变化的,但是用线段树做也不错,,而且最近才开始弄线段树,当练练手。。。一定要路径压缩的并查集,,不然线性的话,耗时过高。。。而且不能写递归的路径压缩,我猜得。。。因为n#include#include#includeusing namespace std;int n;int w[100100];struct node{原创 2012-02-16 01:02:56 · 1022 阅读 · 0 评论 -
sicily 1686 Happy Children‘s Day
线段树,第一次用。。。参考代码写#include#include#includeusing namespace std;int max(int a,int b){return a}struct node{int left;int right;int most;int rest;int index;}seg[200010];int w[10原创 2012-02-15 03:15:40 · 648 阅读 · 0 评论 -
sicily stick
两个数异或之后为0#include#includeusing namespace std;int main(){int n;while(scanf("%d",&n),n){ int s = 0; int tmp; for(int i = 0;i scanf("%d",&tmp); s^=tmp;原创 2012-02-06 14:39:08 · 439 阅读 · 0 评论 -
sicily 7973. Hot Dogs in Manhattan
先BFS记录,然后从大到小枚举点,维护最大的曼哈顿距离,具体做法就是维护x+y x-y的最大值和最小值 四个数新加入的点与之前点的最大值就是MAX(x1+y1)-(x-y)的最大值,x-y同理#include #include #include #include #include using namespace std;struct node{int x;i原创 2013-04-20 01:27:04 · 707 阅读 · 0 评论