[Day2]ACM2018吉林线下赛 F.The Hermit

原题题面太长了,不想放在上面浪费版面,直接简单说一下中文简化题面。当时感觉这题有点像贪心,结果发现自己的第一感觉还是错的,直接弃疗。

题面

在一个 1 − N 1-N 1N的一维坐标系上有 N N N个基站,每个基站的位置 X i = i X_i=i Xi=i,对于每个基站而言有一个辐射半径为 r a d i rad_i radi,于是对于基站 i i i的辐射范围则为 [ i − r a d i + 1 , i + r a d i − 1 ] [i-rad_i+1,i + rad_i-1] [iradi+1,i+radi1],并且保证基站辐射范围的左边界单调不减。
对于基站 i i i定义其信号接收的完美基站 k k k,其中 k k k满足以下条件:
k &lt; i k &lt; i k<i
存 在 j ( k &lt; = j &lt; i ) s . t . d i s ( k , j ) &gt; = d i s ( i , j ) 存在j(k&lt;=j&lt;i) \quad s.t. \quad dis(k,j)&gt;=dis(i,j) j(k<=j<i)s.t.dis(k,j)>=dis(i,j)
i , j 的 信 号 均 能 够 覆 盖 到 k i,j的信号均能够覆盖到k ijk
对于 i i i,定义 a i a_i ai i i i能够完美覆盖的节点个数,求 a i a_i ai的异或和。

分析

因为 j j j的选择比较自由,不妨令 j = i − 1 j=i-1 j=i1,并且只有 k &lt; i − 1 k&lt;i-1 k<i1时, k , i , j k,i,j k,i,j才满足距离的条件,所以我们来考察一下 k k k满足的性质。
i i i能够覆盖到 k k k的前提下, j j j的信号一定能够覆盖到 k k k,于是问题转化成 i i i左边能够覆盖的节点个数的值减2的异或和。

#include <bits/stdc++.h>
#define rep( i , l , r ) for( int i = (l) ; i <= (r) ; ++i )
#define per( i , r , l ) for( int i = (r) ; i >= (l) ; --i )

using namespace std;

int main(){
	ios::sync_with_stdio(false);
	int T = 0;
	cin >> T;
	
	rep( t , 1 , T ){
		int N = 0 , x , ans = 0;
		cin >> N;
		for( int i = 1 ; i <= N ; ++i ){
			cin >> x;
			if( i > 2 && x > 2 ){
				ans ^= (x - 2);
			}
		}
		printf("Case %d: %d\n" , t , ans);
	}
	return 0;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值