地址:http://codeforces.com/gym/102870
https://icpc.xidian.wiki/orz-panda/2020-2021
orz,除了验两道题自闭了两天外什么事都没干,出题人nb,orz pandas。
A
题意:在一排建筑面上贴面积最大的矩形广告。
签到题之一。这个模型十分常见,应该说是单调栈最基本的例题之一。还有另外一种做法,用一条扫描线水平往上扫描计算最大面积,比单调栈麻烦一点不过有时候可能有用。
B
模型比较经典的等价类计数问题,不过推起来会难一些。见这里:http://101.132.170.22/wordpress/?p=717
C
题意:模拟在一排位置上的插入和删除操作,每次插入时会尽量寻找一个离已有物品位置最远的位置。
不难想到用链表维护1e5的位置,用set维护最小间隔。实现上会有一些细节需要注意。
D
题意:计算在一个给定树上进行LCT上均匀随机访问时,需要进行link-cut操作的期望。
把状态视为马尔可夫链,则它应当具有平稳分布。平稳分布下再进行一次访问不会改变已有的概率分布。然后根据已知条件不难算出平稳分布。
E
还没看。
F
表面上是网络流,但仔细一看显然不能用网络流。要用原始的数学方法算最优结果。验题代码:http://101.132.170.22/wordpress/?p=735
G
计划上比较难的数据结构题,不过被SGR用优美的方法过了,orz。
H
题意:实现一个海明码校验。
计划是比较签到的题。不过大家好像看到长题目都不想写,都屯了三四个小时才写。唯一个地方是需要一下d(0)位置的判断,很多人在这个地方卡了一下。
海明码的含义是对二进制串的在2^i位上的数据分别做奇偶校验,于是就能直接定位到错误的位。根据这个思想可以写出简短的代码。
#include <iostream>
using namespace std;
#define inc(i,N) for(int i=0;i<N;i++)
char s[1100000];int n;
int main(){
while (cin>>n){
scanf("%s",s);
int c0=0,pos=0;
inc(i,1<<n) s[i]-='0',c0^=s[i];
inc(i,n){
int c=0;
inc(j,1<<n) if (j>>i&1) c^=s[j];
if (c) pos^=1<<i;
}
if (c0) printf("d(%d) is changed\n",pos);
else puts(pos?"broken":"good");
}
}
I
签到题,计算多边形的面积。
数据范围1e9,用浮点数直接炸了。理论上直接用ll算叉积也会溢出,不过都能算出正确结果,不好卡就算了。
J
题意:在n*m上填整数,使每行和每列的最大值为给定值。求满足条件的方案数。
计数题不会写orz,qkonb。