【ccpc2018吉林F题】THE HERMIT (思维)

题目描述

The Hermit stands alone on the top of a mountain with a lantern in his hand. The snow-capped mountain range symbolises the Hermit's spiritual achievement, growth and accomplishment.
Hehas chosen this path of self-discovery and, asa result, has reached a heighted state of awareness.

dhh loves to listen to radio. There are  radio stations on a number axis, and the i-th station is located at xi=i. The broadcasting scope of the i-th station is radi, which means stations in the interval [i - radi + 1,i + radi - 1]  can receive the signal from the i-th station. For some unknown reason, the left boundary that can receive the i-th station's signal is non-descending, which means i - radi + 1≤ i + 1 - radi+1 + 1.
Now dhh wants to listen to the radio from station i, and he finds that the station k, satisfying both of the following conditions, can receive perfect signal from the station i: 
·k < i and station k can receive station i's signal. 
·There exists another station j(k≤j<i) such that station  and  can both receive the signal from station j and the distance between station k and j is greater than or equal to the distance between station j and i. 
Now dhh wonders for each station i, how many stations can receive the perfect signal from station i.

 

输入

The first line of the input contains one integer T≤20, denoting the number of testcases. Then T testcases follow. For each testcase:
·The first line contains one positve integer N.
·The second line contains N positive integers rad1, rad2 ,…, radN.
It’s guaranteed that 1≤N≤106 , i-radi+1≥1 and i + radi-1≤N

 

输出

For the k-th testcase, output “Case k: ans” in one line, where ans represents the xor result of answer for each radio station i.
xor is a bitwise operation, which takes two bit patterns of equal length and performs the logical exclusive OR operation on each pair of corresponding bits. The result in each position is 1 if only the first bit is 1 or only the second bit is 1, but will be 0 if both are 0 or both are 1. In this we perform the comparison of two bits, being 1 if the two bits are different, and 0 if they are the same.

 

样例输入

2
7
1 2 3 4 3 2 1
10
1 1 2 3 4 4 3 2 2 1

样例输出

Case 1: 2
Case 2: 0

题意:

有n个电台位于一维坐标轴上,第i个电台 位置xi=i,辐射半径rad_{i}(即[i-rad_{i}+1,i+rad_{i}-1]的电台都会被i覆盖,即收到i的信息),满足i+rad_{i}+1<=i+1-rad_{i+1}+1

定义“完美接收”:如果电台k在电台i的左边(k<i),i覆盖k,并且存在电台j满足k<=j<i,j到k的距离>=i到j的距离,j覆盖k,那么k可以对i的信号“完美接收”。

对每个i,求出有多少个这样的k,这个值设为a_{i}

a_{i}求异或和。

思路:

对于每个i,在它左边的范围内的电台,除了它本身和它左边第一个外,都可以完美接收i的信号。

为什么呢?

我们找的k应满足:

1. k<i

2. i覆盖k

3. 存在电台j满足

3.1 k<=j<i

3.2 j到k的距离>=i到j的距离

3.3 j覆盖k

我们让j=i-1,那么,对于  i-rad_{i}+1<=k<=i-2(自然满足1  2  3.1) 的电台,

有j-k=(i-1)-k>=1,i-j=i-(i-1)=1(所以满足3.2)

因为对所有的 i 满足 i+rad_{i}+1<=i+1-rad_{i+1}+1(这就说明如果k<i,i覆盖k,那么对任意k<=j<=i,满足j覆盖k)

所以3.3也满足。

 

至于i本身和i-1,显然都不能完美接收i的信号。

 

所以 a_{i} = i左边覆盖的电台数-2

a_{i}求异或和就ok啦。

代码:

#include<iostream>
#include<cstdio>
using namespace std;
const int N=1e6+100;
long long a[N];
long long ans;
int main(){
    int t,n;
    scanf("%d",&t);
    for(int ca=1;ca<=t;++ca){
        scanf("%d",&n);
        ans=0;
        for(int i=0;i<n;++i)
            scanf("%lld",&a[i]);
        for(int i=2;i<n;++i)
            if(a[i]>2)ans^=(min(a[i],i+1ll)-2);
        printf("Case %d: %lld\n",ca,ans);
    }
    return 0;
}
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值