【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

相关文章

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

Java枚举类实现Key-Value映射的多种实现方式

《Java枚举类实现Key-Value映射的多种实现方式》在Java开发中,枚举(Enum)是一种特殊的类,本文将详细介绍Java枚举类实现key-value映射的多种方式,有需要的小伙伴可以根据需要... 目录前言一、基础实现方式1.1 为枚举添加属性和构造方法二、http://www.cppcns.co

JavaScript Array.from及其相关用法详解(示例演示)

《JavaScriptArray.from及其相关用法详解(示例演示)》Array.from方法是ES6引入的一个静态方法,用于从类数组对象或可迭代对象创建一个新的数组实例,本文将详细介绍Array... 目录一、Array.from 方法概述1. 方法介绍2. 示例演示二、结合实际场景的使用1. 初始化二

Python循环缓冲区的应用详解

《Python循环缓冲区的应用详解》循环缓冲区是一个线性缓冲区,逻辑上被视为一个循环的结构,本文主要为大家介绍了Python中循环缓冲区的相关应用,有兴趣的小伙伴可以了解一下... 目录什么是循环缓冲区循环缓冲区的结构python中的循环缓冲区实现运行循环缓冲区循环缓冲区的优势应用案例Python中的实现库

Java嵌套for循环优化方案分享

《Java嵌套for循环优化方案分享》介绍了Java中嵌套for循环的优化方法,包括减少循环次数、合并循环、使用更高效的数据结构、并行处理、预处理和缓存、算法优化、尽量减少对象创建以及本地变量优化,通... 目录Java 嵌套 for 循环优化方案1. 减少循环次数2. 合并循环3. 使用更高效的数据结构4

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

Pandas中多重索引技巧的实现

《Pandas中多重索引技巧的实现》Pandas中的多重索引功能强大,适用于处理多维数据,本文就来介绍一下多重索引技巧,具有一定的参考价值,感兴趣的可以了解一下... 目录1.多重索引概述2.多重索引的基本操作2.1 选择和切片多重索引2.2 交换层级与重设索引3.多重索引的高级操作3.1 多重索引的分组聚

Python判断for循环最后一次的6种方法

《Python判断for循环最后一次的6种方法》在Python中,通常我们不会直接判断for循环是否正在执行最后一次迭代,因为Python的for循环是基于可迭代对象的,它不知道也不关心迭代的内部状态... 目录1.使用enuhttp://www.chinasem.cnmerate()和len()来判断for

Java循环创建对象内存溢出的解决方法

《Java循环创建对象内存溢出的解决方法》在Java中,如果在循环中不当地创建大量对象而不及时释放内存,很容易导致内存溢出(OutOfMemoryError),所以本文给大家介绍了Java循环创建对象... 目录问题1. 解决方案2. 示例代码2.1 原始版本(可能导致内存溢出)2.2 修改后的版本问题在

C#实现获得某个枚举的所有名称

《C#实现获得某个枚举的所有名称》这篇文章主要为大家详细介绍了C#如何实现获得某个枚举的所有名称,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... C#中获得某个枚举的所有名称using System;using System.Collections.Generic;usi