【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

相关文章

Python多重继承慎用的地方

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

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

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

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

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

Spring 中的循环引用问题解决方法

《Spring中的循环引用问题解决方法》:本文主要介绍Spring中的循环引用问题解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录什么是循环引用?循环依赖三级缓存解决循环依赖二级缓存三级缓存本章来聊聊Spring 中的循环引用问题该如何解决。这里聊

C 语言中enum枚举的定义和使用小结

《C语言中enum枚举的定义和使用小结》在C语言里,enum(枚举)是一种用户自定义的数据类型,它能够让你创建一组具名的整数常量,下面我会从定义、使用、特性等方面详细介绍enum,感兴趣的朋友一起看... 目录1、引言2、基本定义3、定义枚举变量4、自定义枚举常量的值5、枚举与switch语句结合使用6、枚

C# foreach 循环中获取索引的实现方式

《C#foreach循环中获取索引的实现方式》:本文主要介绍C#foreach循环中获取索引的实现方式,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、手动维护索引变量二、LINQ Select + 元组解构三、扩展方法封装索引四、使用 for 循环替代

Spring Boot循环依赖原理、解决方案与最佳实践(全解析)

《SpringBoot循环依赖原理、解决方案与最佳实践(全解析)》循环依赖指两个或多个Bean相互直接或间接引用,形成闭环依赖关系,:本文主要介绍SpringBoot循环依赖原理、解决方案与最... 目录一、循环依赖的本质与危害1.1 什么是循环依赖?1.2 核心危害二、Spring的三级缓存机制2.1 三

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. 初始化二