`
promiser
  • 浏览: 76932 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论
文章列表

bzoj1073: [SCOI2007]kshort

    博客分类:
  • oi
擦,栈溢出 这个做法么,就是明显的二分+爆搜验证取最优解了 // please forgive my foolish, I Cheat the last two points const int N = 60; typedef pair<int, int> II; vector<II> E[N], Back[N]; int n, m, Kth, S, T; int G[N], Cnt[N], Num, Limit, Now; bool Vis[N]; queue<int> Q; bool Cheat; inline void Inp ...
分半搜索,枚举那几个数字分成两半的方案,然后暴力看它们组合Mod d 的余数,并记录,left[i]表示左边的有多少组合mod d = i ,right[i] 也相同,然后用简单数学方法合并 const int N = 15, M = 1010; int Dat[N], TDat[N], Cnt[2][M], Ans; int n, Mod; char S[N]; inline void Solve() ; inline void NextState(int x, int Pick) ; inline void Input() { int T; for(scanf(& ...

bzoj1071: [SCOI2007]组队

    博客分类:
  • oi
利用单调性+堆+乱搞即可 const int N = 5010; struct Node { int Speed, Height, Val; friend bool operator <(Node A, Node B) { return A.Val < B.Val; } } Dat[N]; priority_queue<Node> Q; int n, A, B, C; inline void Input() { scanf("%d%d%d%d", &n, &A, &B, &C); For ...

bzoj1070: [SCOI2007]修车

    博客分类:
  • oi
网络流,将维修人员拆成N个,记为P(i,j),然后每辆车对P(i,j)连一条容量为1,权为j*time[i][j]的边,表示让第i个维修人员在倒数第j的位置修这辆车,于是会导到剩下的所有人多等j*time[i][j]的时间 const int N = 700; struct Edge { int V, Val, Cost; Edge *Next, *Pair; Edge() {} Edge(int _V, int _Val, int _Cost, Edge *_Next) : V(_V), Val(_Val), Cost(_Cost), Next(_Next) {} ...
1、O(N^2)地枚举对角线。 2、分别求出这条对角线左右两侧到这条线段所在直线距离最大的点,记为l、r,相当于求出以这条对角线为底、左右两侧分别高最大(面积最大)的三角形。 3、对于枚举的每条对角线,计算四边形面积并更新答案。 这样的时间复杂度是O(N^3)的,不能承受,一个优化就是,可以证明:如果按照逆时针顺序存储凸包,那么对于对角线(i,j+1),与之相对应的l、r分别在对角线(i,j)的逆时针方向,也就是说可以省略一些不必要的枚举过程。对于对角线(i,j+1)的l、r,可以直接从对角线(i,j)的l、r开始枚举。 传送门:http://hi.baidu.com/poet_shy ...
状态定义是(l,r,t)表示l到r的字串,t表示中间能否放M,注意最开始有个M const int N = 60; char Dat[N]; int Dp[N][N][2]; bool Vis[N][N][2]; inline void Input() { scanf("%s", Dat + 1); } inline bool Match(int A, int B) { int Len = B - A; Rep(i, Len) if(Dat[A + i] ^ Dat[B + i]) return 0; return 1; } ...
最水最水最水的一道题目, 完全不需要多说   const int N = 50010, D = 17; struct Node { int Year, Water; Node() {} Node(int _Year, int _Water) : Year(_Year), Water(_Water) {} } Dat[N]; int Dp[D][N]; int n, m; inline void Input() { scanf("%d", &n); For(i, 1, n) scanf("%d%d", & ...

bzoj1066: [SCOI2007]蜥蜴

    博客分类:
  • oi
每个点(i,j),(i,j)→(i,j)'连上容量为h[i][j]的边。(i,j)为入点。(i,j)'为出点 对于所有有蜥蜴的点,从S给它连一条容量为1的边。对于所有可以跳到外面的点,连到T,容量是h[i][j]。 网络流跑一遍 const int N = 30; struct Point { int Ox, Oy, H; Point() {} Point(int _Ox, int _Oy, int _H) : Ox(_Ox), Oy(_Oy), H(_H) {} } Dat[sqr(N)], Start[sqr(N)]; struct Edge { int V, ...
传送门:http://blog.csdn.net/whjpji/article/details/7593329 const int N = 70; int Fa[N], n, m; DB Dp[N][N][N], S[N][N][N]; DB C[N], F[N], K[N], Ans; inline void Input() { scanf("%d%d%lf", &n, &m, &K[1]); For(i, 2, n) K[i] = K[i - 1] * K[1]; For(i, 1, n) scanf("%d& ...
传送门:http://blog.sina.com.cn/s/blog_86942b1401015r81.html   const int N = 100010, M = 1000010; struct Edge { int V, Val; Edge *Next; Edge() {} Edge(int _V, int _Val, Edge *_Next) : V(_V), Val(_Val), Next(_Next) {} } *Fir[N]; int n, m; int Dep[N]; bool Vis[N]; vector<int> C; i ...
再来一道神题 题解传送门:https://www.byvoid.com/blog/noi-2008-design/ const int N = 100010; struct Edge { int V; Edge *Next; Edge() {} Edge(int _V, Edge *_Next) : V(_V), Next(_Next) {} } *Fir[N]; int Q[N], Head, Tail, Fa[N]; int n, m, Mod; bool Vis[3][N][11]; LL Dp[3][N][11]; inline void Inp ...
又是一道神题 题解传送门:http://blog.sina.com.cn/s/blog_86942b1401015yln.html 代码完全抄袭某神,请无视掉 const int N = 1010, M = 1000010; struct Dat { int t, p; } Dat[M]; int C1[N * 3][N << 2], C2[N * 3][N << 2]; int n, m, Len, T; inline void Input() { scanf("%d%d", &T, &Len), n = ...
这是一道网络流神题 题解传送门:https://www.byvoid.com/blog/noi-2008-employee/ const int N = 1100; struct node { int From, To, Next, Cost, Pair, Val; } Edge[N * 40]; int First[N], pre[N * 40], Tot; int n, m, S, T, Dat[N]; int Ans, Dis[N]; bool InQ[N]; queue<int> Q; inline void Add(int x, int ...
在一个矩阵中任意一个黑色点都可以通过旋转到任意一个位置,所以只要尽可能的选择一些黑点,让每一行&每一列都用且仅用一次,二分匹配就显然了   以前打过一种快速二分匹配算法,但现在忘,只能打普通的二分匹配算法。那种快速二分匹配算法是用了网络流的思想,用BFS重标号,多路增广   const int N = 210; int n, Dat[N][N], Link[N]; bool Vis[N]; inline void Input() { clr(Dat, 0), clr(Link, 0); scanf("%d",&n); For ...
一看就知道是数据结构的题目,乍一看可以用STL水过去 题目中有几个细节要注意,这里不说看代码 const int N = 500010; int n, m, Dat[N], Sort[N]; set<int> s1, s2; map<int, int> Hash; vector<int> g[N]; int Ans1, Ans2; inline void Input() { scanf("%d%d", &n, &m); Ans2 = INF, Ans1 = INF; Rep(i, n) { ...
Global site tag (gtag.js) - Google Analytics