BZOJ1045 糖果传递

题意简述:

有n个小朋友坐成一圈,每人有$a[i]$个糖果每人只能给左右两人传递糖果,每人每次传递一个糖果代价为1,求使所有人获得均等糖果的最小代价

……

hdu6681 Rikka with Cake

题目大意:

给出$k$条射线 求能使$n*m$的矩形分成多少个块

题解:

由于是射线 所以所以每个一个交点都能产生贡献 最后的答案就是总交点数+1

那如何去维护呢 我们可以把$k$条射线按横纵来考虑 对于竖的射线 假如为$U$ 那么$[y,m]$便被覆盖 假如为$D$ 那么$[0,y]$便被覆盖 对于这样的线段可以考虑用树状数组去维护 我们考虑一个扫描线从下到上的扫过去 假如当前扫到了$y$ 那么便执行操作$add(x,val)$ 对于一个向下的射线 我们可以当扫描线在$0$时$add(x,val)$ 当扫描线在$y+1$时 $add(x,-val)$ 其中$val=1$ 假如我们扫描线当前遇到了横线的话 就直接查询从$L-R$覆盖的线段即可 由于$x$范围很大但是$k$很小 所以我们可以对$x$坐标离散化

……

CF1207C Gas Pipeline

题目大意:

给定一个二进制01串 为1代表这个地方需要是高度为2的柱子 为0代表可以为高度为1或者2的柱子。起点和终点柱子高度都为必须1 同时横向走的时候需要管道 柱子的单位花费是b 管道的单位花费是a 从1到2还需要额外的a花费 问怎么安排使得花费最小

……

CF1196

A. Three Piles of Candies

题解:答案为$\lfloor \frac{a+b+c}{2} \rfloor$

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std;
long long a,b,c,ans;
int q;
int main()
{
	cin>>q;
	while(q--)
	{
		cin>>a>>b>>c;
		cout<<(a+b+c)/2<<endl;
	}
	return 0;
}
……