Time:2018.4.11 2:20-6:00
Link
A Giant Snail Maze
题意
分析
ym:从里向外dpdp,转移时维护前缀minmin正反转两圈。待补
B Martian Sunrise sole by ym sole by czh
题意
给出n种音调,一种音调由7个音阶构成,一个音乐家可以演奏2种音调,现给出有一个很长的曲子共有m个音阶,一个音乐家可以演奏其中连续的一段,问最少需要多少个音乐家
(n<=16,m<=1e5)
分析
ym:将所有情况枚举出来,从左到右贪心的取即可,时间复杂度(n^2*m)
czh:从一到ans枚举音乐家的谱子
C Sleep Buddies solved by ym&czh
分析
直接对每一个集合的数看做二进制的位,最多只有2^10,枚举数字算贡献即可,小数注意精度eps,时间复杂度O(2^10*2^10*10)
D Interstellar Love
Difficult
E Mars Explorer
题意
分析
ym:正着走拿物品不会更优,因此先正着走到最远处,往回走的时候再考虑拿,bitsetbitset优化背包,需要注意自身重量。待补
F Bandejao solved by czh&ym
签到
G Job List
题意
分析
模拟
H Reporting on Mars solved by ym&czh
题意
实质上给n个-1/1的序列,要求每个连续的k个数的乘积都为正数,可以对任意数进行修改,问最少修改的次数
分析
赛时:贪心wa的结束
赛后:实施证明贪心确实容易漏情况
简单推导发现下标 mod k 同余的位置符号相同,可以预处理出每类位置取正或者取负的代价,然后简单dp即可
dp[i][0/1]:前i个位正数/负数的最优解
I Lazy Painting solved by ym&czh
题意
给一个有n×m个格子的网格,给出一个H×W的矩形,现给出q条操作,每条操作给出当前操作的左上角的格子坐标为(ri,ci)为矩形的涂色,若左边界全涂色则不进行任何涂色,若未被全部涂色,则从左边界为染色的格子出发开始在矩形内染未染色的格子 1 ≤ N, M ≤ 105 and 1 ≤ N * M ≤ 3 * 106,(1 ≤ H ≤ N, 1 ≤ W ≤ M) ,q (1 ≤ q ≤ 105), (1 ≤ ri ≤ N - H + 1, 1 ≤ ci ≤ M - W + 1)
分析
数据范围过大,若想开数组需考虑用vector动态开二维数组
显然对每一个询问暴力从左边界bfs修改会爆炸
主要问题是如何解决被涂色的点呗被重复询问,可以对于每一列开一个set,1~n从小到大编号,染色的格子删掉,每次二分查找左边界未涂色的格子,从其出发dfs
(erase中指针被删除会失效)
时间复杂度O(n*mlognlogn)
#include
using namespace std;
int dx[5]={1,-1,0,0};
int dy[5]={0,0,1,-1};
const int maxn = 2e5+7;
setpos[maxn];
int sum;
int n,m,h,w,q,x,y;
int xx, yy;
void dfs(int a, int b)
{
if(axx||byy||pos[b].count(a)==0)
return;
pos[b].erase(a);
sum--;
for(int i=0;i<4;i++)
{
dfs(a+dx[i], b+dy[i]);
}
}
int main()
{
scanf("%d%d%d%d%d", &n, &m, &h, &w, &q);
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
pos[i].insert(j);
}
}
sum=n*m;
while(q--)
{
scanf("%d%d", &x, &y);
xx=x+h-1, yy=y+w-1;
set::iterator p;
p=pos[y].lower_bound(x);
while( p!=pos[y].end()&&(*p)<=xx)
{
dfs(*p,y);
//int t=*p;
p=pos[y].lower_bound(x); // 此行不知道为什么将x改为*p就RE
if(p==pos[y].end())
break;
}
printf("%d\n", sum);
}
return 0;
}
J The Keys solved by ym &czh
题意
n扇门从1~n排成一行,按顺序开门,给出开n扇门的钥匙比编号,现有m个钥匙扣,每把钥匙随机的放在一个钥匙扣上,初始所有的钥匙扣都在兜里,问需要交换几次使全部的门都打开的期望值
(一把钥匙可能开多扇门,每次交换一定可以将正确的钥匙拿出,开第一扇门拿的钥匙扣不算交换次数,每次交换)
分析
每一扇门不在当前钥匙扣的概率为(k-1)/k
根据期望线性可加不难算出ans=k−1k∑ni=1[di≠di+1]ans=k−1k∑i=1n[di≠di+1]。
K Dire, Dire Docks
题意
给出n个点的坐标,要求有n条线段,线段只经过两个点,且不能穿过其它线段,一个点不能超过四条线段连接,输出线段的起末点,解不唯一,顺序不唯一
分析
ym:极角排序,留坑
Summary
Ym:深知dp多么强大,不会dp是多么无助,前期脑残罚时过多
Czh: