Skip to content
标签
cnblogs
codeforces
字数
319 字
阅读时间
2 分钟

题目大意

一个数组 a 。对于每个 j ( 1jn2 ) 写出一个由 [aj,aj+1,aj+2] 组成的三元组。

满足以下条件之一,那么这对三元组就是美丽的:

  • b1c1b2=c2 以及 b3=c3
  • b1=c1b2c2b3=c3
  • b1=c1b2=c2b3c3

求书写的三元组 [aj,aj+1,aj+2] 中优美的三元组对数。

思路

为保证每次只遍历一次,将每次遇到的三元组[aj,aj+1,aj+2] 处理为三小组

[0,aj+1,aj+2]

[aj,0,aj+2]

[aj,aj+1,0]

存入map中,存储次数,再将原三元组存入map中

每次查找当前小组的次数,减去匹配到的原组次数

C++
map<tuple<int, int, int>, int>mp;
int res = 0;

rep(ii, 0, n - 2) {
	tuple<int, int, int>t1 = { 0       ,arr[ii + 1]  , arr[ii + 2] };
	tuple<int, int, int>t2 = { arr[ii] , 0           , arr[ii + 2] };
	tuple<int, int, int>t3 = { arr[ii] , arr[ii + 1] , 0           };
	tuple<int, int, int>t  = { arr[ii] , arr[ii + 1] , arr[ii + 2] };
	res += mp[t1]++ - mp[t];
	res += mp[t2]++ - mp[t];
	res += mp[t3]++ - mp[t];
	mp[t]++;
}

就可以只遍历一次数组

贡献者

The avatar of contributor named as lulaalu lulaalu

文件历史

撰写