雕刻时光

just do it……nothing impossible
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
上一页 1 ··· 35 36 37 38 39 40 41 42 43 ··· 50 下一页

2011年7月15日

摘要: 求最小排序交换次数贪心做View Code #include<stdio.h>#include<algorithm>#include<iostream>using namespace std;int b[1009],a[1009];int min(int a,int b){ if(a>b)return b; else return a;}int max(int a,int b){ if(a>b)return a; else return b;}int main(){ int n; int add[6]; while(scanf("%d& 阅读全文

posted @ 2011-07-15 11:17 huhuuu 阅读(353) 评论(0) 推荐(0)

摘要: 离散化,对区间离散化31 101 36 10染色3会变成1 41 23 4染色2所以要区间*22 82 46 8染色3错的,却AC的代码View Code对的代码,虽然被烂数据判错View Code 阅读全文

posted @ 2011-07-15 09:53 huhuuu 阅读(152) 评论(0) 推荐(0)

2011年7月14日

摘要: 前面一直TLE,最终原因是因为没有将查找的压倒O(log(N))查找更新都需要遗传结构!!!View Code #include<stdio.h>structdata{intl,r;__int64all;//开始单点更新__int64hou;}node[300009];inta[100009];voidbuild(intll,intrr,intn){node[n].l=ll;node[n].r=rr;node[n].hou=0;if(ll==rr){node[n].all=a[rr];}if(ll==rr)return;intmid=(ll+rr)>>1;build(l 阅读全文

posted @ 2011-07-14 15:35 huhuuu 阅读(289) 评论(0) 推荐(0)

2011年7月13日

摘要: 先暴力统计开始时逆序数对数量add再枚举a[i]add=add+(n-1)-2*a[i];记录最小View Code #include<stdio.h>int a[60009];int main(){int n;while(scanf("%d",&n)!=EOF){int i;for(i=1;i<=n;i++){scanf("%d",&a[i]);}int j;int add=0;for(i=1;i<n;i++){for(j=i+1;j<=n;j++){if(a[i]>a[j])add++;}}int 阅读全文

posted @ 2011-07-13 08:59 huhuuu 阅读(356) 评论(0) 推荐(0)

2011年7月12日

摘要: 在单纯的更新结点时,是不需要用到遗传结构的在区间的更新时,会用到遗传结构View Code #include<stdio.h>#include<string.h>struct data{int l,r,val;}st[200009];void build(int ll,int rr,int n){st[n].l=ll;st[n].r=rr;st[n].val=0;if (ll==rr) return ;int mid=(ll+rr)/2;build(ll,mid,2*n);build(mid+1,rr,2*n+1);}void updata(int ll,int rr, 阅读全文

posted @ 2011-07-12 17:19 huhuuu 阅读(195) 评论(0) 推荐(0)

摘要: 统计一定区间内颜色的不同种数开个hash,在search随时记录颜色数目做完这题:对线段树有了理解更新操作时,线段树用遗传的方法,在一个区间异化时,将有用信息遗传到子代(仅仅是子代,不是所有的子孙都遗传,这样就节约了时间)统计操作时,线段树用了区间统计(不是统计每个叶子),统计未被异化的区间(不是所有子孙都统计,又节约时间了)对于函数参数的理解:当传入的是结点下标n时,函数里考虑n+n,n+n+1的子树而不仅传入有下标,还有区间时,就要分区间是在当前树的左子树,或是右子树,或是区间同时在左右子树View Code #include<stdio.h>struct data{ int 阅读全文

posted @ 2011-07-12 10:55 huhuuu 阅读(309) 评论(0) 推荐(0)

2011年7月11日

摘要: 超时是因为底层结点也更新了,背离了区间更新的大原则,所以超时View Code #include<stdio.h>struct data{ int l,r,val;}st[300009];inline int max(int a,int b){ return a>b?a:b;}void build(int ll,int rr,int n)//½¨Ê÷{ st[n].l=ll; st[n].r=rr; st[n].val=1; if (ll==rr) return ; int mid=(ll+rr)/2; build(ll,mid,2*n 阅读全文

posted @ 2011-07-11 21:56 huhuuu 阅读(242) 评论(0) 推荐(0)

2011年5月22日

摘要: 题意主要是寻找最长递增子序,每个元素有两个属性,H,W,下一个一定要比上一个的H,W大先排序,再类似最长递增子序的做法,两个for 语句注意点:就是每个元素H,W要比开始给定的大记忆路径的过程就是pre记录法+stack还原View Code #include<iostream>#include<algorithm>#include<stdio.h>#include<stack>using namespace std;struct data{ int no; int w; int h; int add; int pre;}ss[59];////i 阅读全文

posted @ 2011-05-22 19:55 huhuuu 阅读(300) 评论(0) 推荐(0)

2011年5月6日

摘要: 题目的具体做法是参考刘汝佳的《算法艺术与信息学奥赛》,代码倒是自己实现的。大概思路是:1.找出初始状态和目标状态。明显,目标状态就是排序后的状态。2.画出置换群,在里面找循环。例如,数字是8 4 5 3 2 7明显,目标状态是2 3 4 5 7 8,能写为两个循环:(8 2 7)(4 3 5)。3.观察其中一个循环,明显地,要使交换代价最小,应该用循环里面最小的数字2,去与另外的两个数字,7与8交换。这样交换的代价是:sum - min + (len - 1) * min化简后为:sum + (len - 2) * min其中,sum为这个循环所有数字的和,len为长度,min为这个环里面最小 阅读全文

posted @ 2011-05-06 20:45 huhuuu 阅读(436) 评论(0) 推荐(0)

2011年5月5日

摘要: 如何安排相片,使相片尽量能放入几个给定的箱子里(体积不同),但是条件是,每个箱子里的照片不能相邻:如第一张,第二张不能同时放到一个箱子里,而且第一张与最后一张也不能在一起!!!错了N久,解决方法就是尽量把不能最后放的箱子在前面用掉1.按每个箱子剩余容积排序放入第一张到一个箱子里2.每放入一张照片前,先拿第一张所放入的箱子号去放(为了使第一张与最后一张不能相邻),如不行则再按每个箱子剩余容积排序,选择符合的箱子去放http://codeforces.com/problemset/problem/81/DView Code #include<iostream>#include<c 阅读全文

posted @ 2011-05-05 15:47 huhuuu 阅读(313) 评论(0) 推荐(0)

上一页 1 ··· 35 36 37 38 39 40 41 42 43 ··· 50 下一页