【ETOJ P1014】straax‘aks Array 题解(多重循环+暴力枚举+位运算)

2024-02-03 22:12

本文主要是介绍【ETOJ P1014】straax‘aks Array 题解(多重循环+暴力枚举+位运算),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目描述

给定一个长度为 n n n 的数组 a a a 和一个整数 m m m,问数组中有多少个三元组 ( i , j , k ) (i,j,k) (i,j,k),满足:

  1. i < j < k i < j < k i<j<k
  2. ( a i + a j + a k ) × ( a i ⊕ a j ⊕ a k ) ≥ m (a_i + a_j + a_k) \times (a_i \oplus a_j \oplus a_k) \ge m (ai+aj+ak)×(aiajak)m

输入格式

第一行两个整数 n , m n, m n,m ( 1 ≤ n ≤ 500 , 1 ≤ m ≤ 1 0 9 ) (1 \le n \le 500, 1 \le m \le 10^9) (1n500,1m109)

接下来一行 n n n 个整数,第 i i i 个数字表示 a i a_i ai ( 1 ≤ a i ≤ 1 0 9 ) (1 \le a_i \le 10^9) (1ai109)

输出格式

一个整数,表示满足条件的三元组个数。

样例输入1

4 10
1 3 2 5

样例输出1

3

解释

共有3个三元组满足条件: ( 1 , 2 , 4 ) (1,2,4) (1,2,4), ( 1 , 3 , 4 ) (1,3,4) (1,3,4), ( 2 , 3 , 4 ) (2,3,4) (2,3,4)

提示

记得开 longlong。


思路

计算满足特定条件的三元组的数量。这个特定条件是数组中任意三个元素的和乘以这三个元素的异或结果大于或等于给定的数值 m m m

N N N 是数组的最大长度, n n n m m m 是用户输入的值,分别代表数组的实际长度和要比较的数值。 a a a 是存储用户输入数组的变量, a n s ans ans 用来记录满足条件的三元组的数量。

main 函数中,程序首先通过 cin 读取用户输入的 n n n m m m 的值,然后读取 n n n 个数值存入数组 a a a 中。

数据范围不大,直接暴力枚举。通过三层嵌套的 for 循环遍历数组中的所有可能的三元组。对于每一个三元组,程序计算它们的和乘以它们的异或结果,然后判断这个值是否大于或等于 m m m。如果满足条件,就将 a n s ans ans 的值加一。

最后,程序通过 cout 输出 a n s ans ans 的值,这就是满足条件的三元组的数量。

这个算法的时间复杂度是 O ( n 3 ) O(n^3) O(n3),因为它需要遍历数组中所有可能的三元组。

注意:记得开 long long,不然会报答案错误 AC:17%


AC代码

#include <iostream>
#define ll long long
#define AUTHOR "HEX9CF"
using namespace std;const int N = 1e7 + 7;ll n, m;
ll a[N];
ll ans;int main() {ios::sync_with_stdio(0);cin.tie(0);cout.tie(0);ans = 0;cin >> n >> m;for (int i = 1; i <= n; i++) {cin >> a[i];}for (int i = 1; i <= n; i++) {for (int j = i + 1; j <= n; j++) {for (int k = j + 1; k <= n; k++) {if ((a[i] + a[j] + a[k]) * (a[i] ^ a[j] ^ a[k]) >= m) {ans++;}}}}cout << ans << endl;return 0;
}

这篇关于【ETOJ P1014】straax‘aks Array 题解(多重循环+暴力枚举+位运算)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/675573

相关文章

C++11作用域枚举(Scoped Enums)的实现示例

《C++11作用域枚举(ScopedEnums)的实现示例》枚举类型是一种非常实用的工具,C++11标准引入了作用域枚举,也称为强类型枚举,本文主要介绍了C++11作用域枚举(ScopedEnums... 目录一、引言二、传统枚举类型的局限性2.1 命名空间污染2.2 整型提升问题2.3 类型转换问题三、C

Java中的for循环高级用法

《Java中的for循环高级用法》本文系统解析Java中传统、增强型for循环、StreamAPI及并行流的实现原理与性能差异,并通过大量代码示例展示实际开发中的最佳实践,感兴趣的朋友一起看看吧... 目录前言一、基础篇:传统for循环1.1 标准语法结构1.2 典型应用场景二、进阶篇:增强型for循环2.

Python循环结构全面解析

《Python循环结构全面解析》循环中的代码会执行特定的次数,或者是执行到特定条件成立时结束循环,或者是针对某一集合中的所有项目都执行一次,这篇文章给大家介绍Python循环结构解析,感兴趣的朋友跟随... 目录for-in循环while循环循环控制语句break语句continue语句else子句嵌套的循

MySQL存储过程之循环遍历查询的结果集详解

《MySQL存储过程之循环遍历查询的结果集详解》:本文主要介绍MySQL存储过程之循环遍历查询的结果集,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言1. 表结构2. 存储过程3. 关于存储过程的SQL补充总结前言近来碰到这样一个问题:在生产上导入的数据发现

Java 枚举的基本使用方法及实际使用场景

《Java枚举的基本使用方法及实际使用场景》枚举是Java中一种特殊的类,用于定义一组固定的常量,枚举类型提供了更好的类型安全性和可读性,适用于需要定义一组有限且固定的值的场景,本文给大家介绍Jav... 目录一、什么是枚举?二、枚举的基本使用方法定义枚举三、实际使用场景代替常量状态机四、更多用法1.实现接

C/C++中OpenCV 矩阵运算的实现

《C/C++中OpenCV矩阵运算的实现》本文主要介绍了C/C++中OpenCV矩阵运算的实现,包括基本算术运算(标量与矩阵)、矩阵乘法、转置、逆矩阵、行列式、迹、范数等操作,感兴趣的可以了解一下... 目录矩阵的创建与初始化创建矩阵访问矩阵元素基本的算术运算 ➕➖✖️➗矩阵与标量运算矩阵与矩阵运算 (逐元

Nginx部署React项目时重定向循环问题的解决方案

《Nginx部署React项目时重定向循环问题的解决方案》Nginx在处理React项目请求时出现重定向循环,通常是由于`try_files`配置错误或`root`路径配置不当导致的,本文给大家详细介... 目录问题原因1. try_files 配置错误2. root 路径错误解决方法1. 检查 try_f

Python多重继承慎用的地方

《Python多重继承慎用的地方》多重继承也可能导致一些问题,本文主要介绍了Python多重继承慎用的地方,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录前言多重继承要慎用Mixin模式最后前言在python中,多重继承是一种强大的功能,它允许一个

Spring三级缓存解决循环依赖的解析过程

《Spring三级缓存解决循环依赖的解析过程》:本文主要介绍Spring三级缓存解决循环依赖的解析过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、循环依赖场景二、三级缓存定义三、解决流程(以ServiceA和ServiceB为例)四、关键机制详解五、设计约

Python位移操作和位运算的实现示例

《Python位移操作和位运算的实现示例》本文主要介绍了Python位移操作和位运算的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 位移操作1.1 左移操作 (<<)1.2 右移操作 (>>)注意事项:2. 位运算2.1