题目描述
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,辐射半径(即
的电台都会被i覆盖,即收到i的信息),满足
定义“完美接收”:如果电台k在电台i的左边(k<i),i覆盖k,并且存在电台j满足k<=j<i,j到k的距离>=i到j的距离,j覆盖k,那么k可以对i的信号“完美接收”。
对每个i,求出有多少个这样的k,这个值设为。
对求异或和。
思路:
对于每个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,那么,对于 <=k<=i-2(自然满足1 2 3.1) 的电台,
有j-k=(i-1)-k>=1,i-j=i-(i-1)=1(所以满足3.2)
因为对所有的 i 满足 (这就说明如果k<i,i覆盖k,那么对任意k<=j<=i,满足j覆盖k)
所以3.3也满足。
至于i本身和i-1,显然都不能完美接收i的信号。
所以 = i左边覆盖的电台数-2
对求异或和就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;
}