[CCC 2024 S1] Hat Circle
题目描述
在最近的一次聚会上, N N N 个人围坐在一张圆桌旁,其中 N N N 是偶数。座椅按顺时针方向编号为 1 ∼ N 1\sim N 1∼N。每个人都戴着一顶写有数字的帽子。具体来说,座位 i i i 上的人戴着一个写有数字 H i H_i Hi 的帽子。
每个人都看着圆圈中与自己正对面的人。
请你求出看到戴着与自己相同号码的帽子的人的数量。
输入格式
输入的第一行包含一个正偶数 N N N 表示聚会的人数。
接下来 N N N 行分别包含一个非负整数 H i H_i Hi,表示第 i i i 个人的帽子上写的数字。
输出格式
输出一个整数,表示看到戴着与自己相同号码的帽子的人的数量。
样例 #1
样例输入 #1
4
0
1
0
1
样例输出 #1
4
样例 #2
样例输入 #2
4
1
0
0
1
样例输出 #2
0
提示说明
【样例 1 解释】
桌子周围的四个座位排布如下图所示。圆圈里的数字表示这个人的帽子上写的数字,圆圈旁边的数字表示这个人的编号。注意每个人看到的数都与自己的帽子上的数相等。坐在位置 1 1 1 和 3 3 3 上的人都看到了数字 0 0 0,坐在位置 2 2 2 和 4 4 4 上的人都看到了数字 1 1 1。
【样例 2 解释】
桌子周围的四个座位排布如下图所示。圆圈里的数字表示这个人的帽子上写的数字,圆圈旁边的数字表示这个人的编号。注意每个人看到的数都不与自己的帽子上的数相等。坐在位置 1 1 1 和 4 4 4 上的人都看到了数字 0 0 0,坐在位置 2 2 2 和 3 3 3 上的人都看到了数字 1 1 1。
【数据范围】
本题采用捆绑测试。
对于所有数据,保证 1 ≤ N ≤ 1 0 6 1\leq N\leq 10^6 1≤N≤106, 0 ≤ H i ≤ 2 × 1 0 6 0\leq H_i\leq 2\times 10^6 0≤Hi≤2×106。
下面的表格显示了 15 15 15 分的分配方案:
分值 | 描述 | N N N 的范围 | H i H_i Hi 的范围 |
---|---|---|---|
2 2 2 | 人数很少;只有两种可能的帽子上的数 | N ≤ 4 N \leq 4 N≤4 | H i ≤ 1 H_i \leq 1 Hi≤1 |
1 1 1 | 只有一种可能的帽子上的数 | N ≤ 100 N \leq 100 N≤100 | H i = 1 H_i = 1 Hi=1 |
2 2 2 | 坐在奇数位置上的人的帽子上数为 1 1 1,坐在偶数位置上的人的帽子上数为 0 0 0 | N ≤ 100 N \leq 100 N≤100 | H i ≤ 1 H_i \leq 1 Hi≤1 |
5 5 5 | 中等多少的人数 | N ≤ 2 × 1 0 3 N \leq 2 \times 10^3 N≤2×103 | H i ≤ 4 × 1 0 3 H_i \leq 4 \times 10^3 Hi≤4×103 |
5 5 5 | 很多人和可能的帽子上的数 | N ≤ 1 0 6 N \leq 10^6 N≤106 | H i ≤ 2 × 1 0 6 H_i \leq 2 \times 10^6 Hi≤2×106 |
代码内容
// #include <iostream>
// #include <algorithm>
// #include <cstring>
// #include <stack>//栈
// #include <deque>//队列
// #include <queue>//堆/优先队列
// #include <map>//映射/* */
// #include <unordered_map>//哈希表
// #include <vector>//容器,存数组的数,表数组的长度
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N=1e6+10;
ll a[N];
int main()
{
ll n;
cin>>n;
ll ans=0;
for(ll i=1;i<=n;i++)
cin>>a[i];
for(ll i=1;i<=n/2;i++)
{
if(a[i]==a[i+n/2])
ans+=2;
}
cout<<ans<<endl;
return 0;
}