【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到j的距离,j覆盖k,那么k可以对i的信号“完美接收”。

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

a_{i}求异或和。

思路:

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

为什么呢?

我们找的k应满足:

1. k

2. i覆盖k

3. 存在电台j满足

3.1 k<=j

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

所以3.3也满足。

 

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

 

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

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

代码:

#include
#include
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;i2)ans^=(min(a[i],i+1ll)-2);
        printf("Case %d: %lld\n",ca,ans);
    }
    return 0;
}

你可能感兴趣的:(【ccpc2018吉林F题】THE HERMIT (思维))