2021.5.9(cf)

1.cf C. Nastia and a Hidden Permutation https://codeforces.com/contest/1521/problem/C

交互题:题目大意,T组测试样例,每组输入一个n,代表一个n个数的序列,序列数字1~n,各不相同,每次可以用以下两种方式询问
t = 1 : m a x ( m i n ( x , p i ) , m i n ( x + 1 , p j ) ) ; t=1: max(min(x,pi),min(x+1,pj)); t=1:max(min(x,pi),min(x+1,pj));

t = 2 : m i n ( m a x ( x , p i ) , m a x ( x + 1 , p j ) ) . t=2: min(max(x,pi),max(x+1,pj)). t=2:min(max(x,pi),max(x+1,pj)).
要求不超过3*n/2+30次询问,确定该序列,并输出。(注意按照交互题的询问和输出方式进行,具体看原题)

思路:首先明确如果我们能找到该序列的最大值,即n,然后对于其他的值我们就很容易确定了,即通过

不妨令pj=n, 则通过: t=2: min(max(1,pi),max(2,pj)).(pj=n); 可以n-1次确定其他的值,

接下来就是怎么找到最大值,

通过t=1: val = max(min(n-1,pi),min(n,pj));

要么pi=n,要么pj=n。

(1)如果pj=n,则val=n。如果val=n,那么情况也是唯一的,即pj=n,因为min(n-1,pi)不可能产生n,只有在min(n,pj)可能出现n,而出现n 的唯一方式就是pj=n,所以一旦val=n,则pj=n。

(2)如果pi=n,则val=n-1,但val=n-1,pi不一定是n,所以不能通过val=n-1来确定pi=n。所以需要pi,pj进一步验证pi是不是n,如果不是则继续。val=n-1的情况三种:pi=n,pi=n-1,pj=n-1,所以最多需要询问n/2+3次。

接下来n-1次t=2询问,来确定其他的数

2.C. Berland Regional https://codeforces.com/contest/1519/problem/C

模拟题:题目大意不好表述,通过题目链接了解大意。

思路很好想,关键是优化,如果纯暴力枚举k,枚举学校,人数,肯定超时。

最简单的优化,离散化处理学校,然后将每个学校的学生能力值从大到小排序,并记录前缀和。

仅仅这样还不够,接下来是分块,用O(1)时间复杂度输出一个学校的战力。可以发现每个学校派出的最多的人数为

该学校人数/组数(下取整)* 组数,这样就可以用O(1)的时间算出一个学校的能力值了。

仅仅这样还是不行,继续优化,根据学校人数,从大到小排序,第一次出现k>总人数的情况就可以直接break了。

虽然还是二重循环,但因为break的存在,会有很多无效的循环,类似于剪枝。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值