保龄,不放出来丢人了。
.
A. 大众点评
手贱 -100pts。
看到交互被吓了一跳,看完题面还是很懵,直到看了附件里给的样例代码。
相当于只写一部分代码,有些函数给你封好了能直接用。
思路还是很容易的,用两个随便什么容器存一下可能的最大值和最小值,我用的 set,最后一个一个查就出答案了,在 \(n\le 400\) 的情况下,最多调用 \(200+399\) 次,不会报错。
但是样例程序里没有头文件,只有一个 #include "ramen.h"
,开始还没注意到,后来注意到了,把万能头删了,mac 上也试运行不了,所以就交了,然后 100pts -> 0pts。
还有为啥我赛后过了不显示啊。
点击查看代码
#include<bits/stdc++.h>
#include"ramen.h"
using namespace std;
void Ramen(int N)
{
set<int>mx,mn;
for(int i=0;i+1<=N-1;i+=2)
{
if(Compare(i,i+1)==1) mx.insert(i),mn.insert(i+1);
else mx.insert(i+1),mn.insert(i);
}
if(N&1) mx.insert(N-1),mn.insert(N-1);
while(mx.size()>1)
{
set<int>::iterator a,b;
a=mx.begin();mx.erase(a);
b=mx.begin();mx.erase(b);
if(Compare(*a,*b)==1) mx.insert(*a);
else mx.insert(*b);
}
while(mn.size()>1)
{
set<int>::iterator a,b;
a=mn.begin();mn.erase(a);
b=mn.begin();mn.erase(b);
if(Compare(*a,*b)==1) mn.insert(*b);
else mn.insert(*a);
}
set<int>::iterator a,b;
a=mx.begin(),b=mn.begin();
Answer(*b,*a);
}
B. 录取查询
原[ABC285F] Substring of Sorted String
赛时想到线段树但没多想,因为确实还没见过这种存储查询字符有关的题。
于是打 20pts 暴力,(没想到成了这场为一的 20pts思路是存一下每个字母总共出现的次数,然后找区间的时候判断字符更改到没到该字符出现的总数即可。
正解是线段树维护区间是否递增,两端字母和字母数量。
C. 精准打击
确实精准打击到我了不是吗?再次手贱 -100pts。
正解赛时通过找二叉树的性质找到了。先预处理出来深度为 \(\left[0,d\right]\) 的满 \(k\) 叉树的节点总数,然后从小到大枚举,按贪心的思路从大往小减,找到这个最小值即可,复杂度应该是 \(\mathcal{O(d^2)}\) 的。