上一页 1 2 3 4 5 6 7 8 ··· 14 下一页
摘要: 很裸很水的树状数组#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<string>#include<queue>using namespace std;#define N 1000005int c[N],n,m;int sum(int x){ int ret=0; while(x) { ret+=c[x]; x-=x&-x; } return ret;}void ad 阅读全文
posted @ 2013-05-29 10:56 小仪在努力~ 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 假设A,B,C,D分别用0,1,2,3来表示,对于每个位置,前一位置的坐标不是与之相差1就是相差2。本位置坐标为偶数的时候,前一位置为(走路1)本坐标+1或者(走路0)(本坐标+2)%4 > <假设dp[i][j]表示i长度当前位置为j的一共有多少种,那么要求第k种,我们只需要知道前一位置到底来自于本坐标+1或者(本坐标+2)%4,当然走0路的,是更小的。也就是说确定前一位置来自于哪里,我们只需要用k与dp[i-1][(j+2)%4]比较,小于等于的就走0路,大于的就走1路#include<iostream>#include<cstdio>#include< 阅读全文
posted @ 2013-05-28 22:42 小仪在努力~ 阅读(241) 评论(0) 推荐(0) 编辑
摘要: 摘抄自白书:考虑第i个人当裁判的情形。假设a[1]到a[i-1]有c[i]个比a[i]小,那么就(i-1)-c[i]个比a[i]大;同理,假设a[i+1]到a[n]中有d[i]个比a[i]小,那么就有(n-i)-d[i]个比a[i]大。根据乘法原理和加法原理,i当裁判有c[i]*(n-i-d[i])+(i-c[i]-1)*d[i]种比赛。这样,问题就转发为c[i]和d[i]。#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm 阅读全文
posted @ 2013-05-27 21:47 小仪在努力~ 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 开头死磕磕不出贪心策略,然后晚上回去后,突然想到如果我用一个vis数组要标识当天有没有用过,然后对于每个作业,我都选用它的deadline作为做作业的时间,那不就过了么。额,然后我早上就过来试试,然后发现第一组数据都过不了,突然觉得自己脑子进水,无奈我已经对师弟开下海口,说想出了贪心策略。我顿时觉得丢不起这个脸,><我一定要死磕出来!然后硬着头皮做,左想想右想想,连树状数组都打上去了,还是没有想出来。然后一怒,哪有老师那么变态把做作业的deadline设置在若干年以后的,这deadline的值绝对不会超过1000,然后暴力,把每个作业都尽可能在离deadline最近的、没有用过的一 阅读全文
posted @ 2013-05-27 11:21 小仪在努力~ 阅读(210) 评论(0) 推荐(0) 编辑
摘要: 与前面的那题一样的做法:#include <iostream>#include <cstdio>#include <cmath>#include<cstring>#include<vector>#include <algorithm>using namespace std;#define N 1000005#define LL long longint c[N],n;struct point{ int val,id;}p[N];int sum(int x){ int ret=0; while(x) { ret+=c[x]; 阅读全文
posted @ 2013-05-25 21:17 小仪在努力~ 阅读(234) 评论(0) 推荐(0) 编辑
摘要: 牢骚:~做了那么久树状数组卡死在离散化,无语到透顶。离散化的定义:把无限空间中有限的个体映射到有限的空间中去,以此提高算法的时空效率。这题是赤裸裸的求逆序对,为何要用离散化?首先,这恶心的题目给出a[i]的范围居然是10亿,这还求啥逆序对,开个辅助数组c,直接MLE了,还好出题人人性化了点,给了个数组长度n,1<=n<50,000,还有希望...然后,我们根据a[i]的值从小到大排列,留着它的id...然后遍历#include <cstdio>#include <cmath>#include<vector>#include <algorit 阅读全文
posted @ 2013-05-25 17:55 小仪在努力~ 阅读(125) 评论(0) 推荐(0) 编辑
摘要: http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=binaryIndexedTreesFinishhttp://community.topcoder.com/tc?module=Static&d1=tutorials&d2=binarySearchFinishthinking:我一直以为自己已经精通二分,然后现在才发现自己根本没有深入,读罢此文,做了2次测试,然后果断又添加了点东西去“二分总结”http://community.topcoder.com/tc?module=Static& 阅读全文
posted @ 2013-05-24 16:00 小仪在努力~ 阅读(133) 评论(0) 推荐(0) 编辑
摘要: #include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<string>#include<queue>using namespace std;#define N 10005#define LL long longint c[N],a[3000005];int sum(int x){ int ret=0; while(x) { ret+=c[x]; x-=x&-x; } ret 阅读全文
posted @ 2013-05-24 15:51 小仪在努力~ 阅读(174) 评论(0) 推荐(0) 编辑
摘要: 给定一组数,然后依次的挪动该组数的元素共得到n种序列。求这n中序列中逆序数最少的个数。#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<string>#include<queue>using namespace std;#define N 5005int n,c[N]; int sum(int x){ int ret=0; while(x) { ret+=c[x]; x-=x 阅读全文
posted @ 2013-05-23 20:52 小仪在努力~ 阅读(141) 评论(2) 推荐(0) 编辑
摘要: 题意:交换任意两个相邻奶牛的坐标,使得它们的暴怒值升序排列,题目已经限制了,每头牛的暴力值是唯一的首先,我们看到数据范围10W,暴力的话,O(N^2)必挂,然后我们想到了树状数组思路:对某个下标k,先求逆序对ans,然后已知k和前面的逆序数要两两交换,所以对于本次的k,交换的总值为v+k*ans,v是前面超了的值之和#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<algorithm>#include<string>#inc 阅读全文
posted @ 2013-05-23 11:49 小仪在努力~ 阅读(607) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 ··· 14 下一页