OrzPandaCup 2020

地址: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位上的数据分别做奇偶校验,于是就能直接定位到错误的位。根据这个思想可以写出简短的代码。

  1. #include <iostream>
  2. using namespace std;
  3. #define inc(i,N) for(int i=0;i<N;i++)
  4. char s[1100000];int n;
  5.  
  6. int main(){
  7. 	while (cin>>n){
  8. 		scanf("%s",s);
  9. 		int c0=0,pos=0;
  10. 		inc(i,1<<n) s[i]-='0',c0^=s[i];
  11. 		inc(i,n){
  12. 			int c=0;
  13. 			inc(j,1<<n) if (j>>i&1) c^=s[j];
  14. 			if (c) pos^=1<<i; 
  15. 		}
  16. 		if (c0) printf("d(%d) is changed\n",pos);
  17. 		else puts(pos?"broken":"good");
  18. 	}
  19. }

I

签到题,计算多边形的面积。

数据范围1e9,用浮点数直接炸了。理论上直接用ll算叉积也会溢出,不过都能算出正确结果,不好卡就算了。

J

题意:在n*m上填整数,使每行和每列的最大值为给定值。求满足条件的方案数。

计数题不会写orz,qkonb。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注