Acwing周赛102
倍增
这是一道简单数论题
using namespace std;
typedef long long LL;
const int N = 1e5 + 10;
int a[N], n;
int div(int x)
{
if(x % 2 == 0)
while(x % 2 == 0) x /= 2;
if(x % 3 == 0)
while(x % 3 == 0) x /= 3;
return x;
}
int main()
{
cin >> n;
for(int i = 1; i <= n; ++ i) scanf("%d", &a[i]);
for(int i = 1; i <= n; ++ i) a[i] = div(a[i]);
for(int i = 1; i <= n; ++ i)
{
if(a[1] != a[i])
{
cout << "No" << endl;
return 0;
}
}
cout << "Yes" << endl;
return 0;
}
三元组
这道题目我们可以直接用stlmap套vector+stl的二分暴力来做也可以选择用前后缀分解,前后缀分解是我第一次见这种思想,会用一篇博客单独整理运用这种思想的题目
stl直接做
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 2e5 + 10;
int a[N];
LL ans;
int main()
{
int n, k;
cin >> n >> k;
map<LL, vector<int>>mp;
for(int i = 1; i <= n; ++ i)
{
scanf("%d", &a[i]);
mp[a[i]].push_back(i);
}
for(int i = 2; i < n; ++ i)
{
int ay = a[i];
if(a[i] % k == 0)
{
LL ax = ay / k, az = 1LL * ay * k;
if(mp.find(ax) != mp.end() && mp.find(az) != mp.end())
{
auto& v1 = mp[ax];
auto& v2 = mp[az];
int m = v2.size();
int k1 = lower_bound(v1.begin(), v1.end(), i) - v1.begin();
if(k1 >= 0)
{
-- k1;
int k2 = upper_bound(v2.begin(), v2.end(), i) - v2.begin();
ans += 1LL * (k1 + 1) * (m - k2);
}
}
}
}
cout << ans << endl;
return 0;
}
前后缀分解去做
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N = 2e5 + 10;
LL a[N];
map<LL, LL>l, r;
LL ans;
int main()
{
LL n, k;
scanf("%lld%lld", &n, &k);
for(int i = 1; i <= n; ++ i)
{
scanf("%lld", &a[i]);
r[a[i]] ++;
}
for(int i = 1; i <= n; ++ i)
{
r[a[i]] --;
if(a[i] % k == 0)
{
if(l.find(a[i] / k) != l.end() && r.find(a[i] * k) != r.end())
ans += 1LL * l[a[i] / k] * r[a[i] * k];
}
l[a[i]] ++;
}
cout << ans << endl;
}
Acwing周赛102的更多相关文章
- AcWing周赛43
AcWing周赛43 题源:https://www.acwing.com/activity/content/1233/ 4314. 三元组 直接暴力做就是了,我一开始还在找规律..悲 我滴代码 #in ...
- AcWing周赛44
周赛44 4317. 不同正整数的个数 link:https://www.acwing.com/problem/content/4320/ 我直接set #include <iostream&g ...
- LeetCode 双周赛 102,模拟 / BFS / Dijkstra / Floyd
本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问. 大家好,欢迎来到小彭的 LeetCode 周赛解题报告. 昨晚是 LeetCode 双周赛第 102 场,你 ...
- Acwing:102. 最佳牛围栏(前缀和 + 二分)
农夫约翰的农场由 NN 块田地组成,每块地里都有一定数量的牛,其数量不会少于1头,也不会超过2000头. 约翰希望用围栏将一部分连续的田地围起来,并使得围起来的区域内每块地包含的牛的数量的平均值达到最 ...
- 【AcWing】周赛
A.糖果 题目链接 链接 题目描述 给定三个正整数 a,b,c. 请计算 ⌊a+b+c2⌋,即 a,b,c 相加的和除以 2 再下取整的结果. 输入格式 第一行包含整数 T,表示共有 T 组测试数据. ...
- 【AcWing】第 62 场周赛 【2022.07.30】
AcWing 4500. 三个元素 题目描述 给定一个长度为 \(n\) 的数组 \(r\_1,r\_2,-,r\_n\). 请你找到其中的三个元素 \(r\_a,r\_b,r\_c\),使得 \(r ...
- AcWing第85场周赛
这场周赛是手速局hh 死或生 某国正在以投票的方式决定 2 名死刑犯(编号 1∼2)的生死. 共有 n 组人员(编号 1∼n)参与投票,每组 10 人. 每组成员只参与一名死刑犯的投票,其中第 i 组 ...
- acwing 102 -利用二分枚举区间平均值
我真的是服了,看了一晚上发现居然,,,,, 上图吧,话说有人评论没... 对于结果来说,不一定要枚举有序数列,感觉这是一种猜结果的方法,只不过特别精确,令人发指 #include<cstdio& ...
- AcWing 102. 最佳牛围栏
农夫约翰的农场由 N 块田地组成,每块地里都有一定数量的牛,其数量不会少于1头,也不会超过2000头. 约翰希望用围栏将一部分连续的田地围起来,并使得围起来的区域内每块地包含的牛的数量的平均值达到最大 ...
- AcWing 第11场周赛题解
计算abc 首先 \(0<=a<=b<=c\) 会随机给出 \(a+b,a+c,b+c,a+b+c\)的值 因为\(a,b,c\)都为正整数,所以\(a+b+c\)一定为最大值 然后 ...
随机推荐
- 即构携手智能对讲机品牌Runbo,打造可视化对讲通信系统
现代通信技术的发展,让信息的传递变得前所未有的便捷.作为双向移动通信工具,对讲机不需要网络支持就可以进行通话,且没有话费产生,尤其适合酒店.物业等使用区域固定.通话频繁的场景. 随着技术的不断迭代,对 ...
- linux内核vmlinux的编译过程之 --- $(kallsyms.o)详解(九)
在编译完依赖 vmlinux.o 后,链接 vmlinux 之前,构建系统还要编译依赖目标 $(kallsyms.o).接下来就对 kallsyms 进行一个简单的解释. 一. 引言 1.符号的概念 ...
- 2023-07-19:布尔表达式 是计算结果不是 true 就是 false 的表达式 有效的表达式需遵循以下约定: ‘t‘,运算结果为 true ‘f‘,运算结果为 false ‘!(subExpr
2023-07-19:布尔表达式 是计算结果不是 true 就是 false 的表达式 有效的表达式需遵循以下约定: 't',运算结果为 true 'f',运算结果为 false '!(subExpr ...
- CTF中的神兵利刃-foremost工具之文件分离
原理 Foremost可以依据文件内的文件头和文件尾对一个文件进行分离,或者识别当前的文件是什么文件.比如拓展名被删除.被附加也仍然可以对其分离. 使用 安装: 需要使用这个工具,首先我们需要安装他, ...
- [nginx]日志中记录自定义请求头
前言 假设在请求中自定义了一个请求头,key为"version",参数值为"1.2.3",需要在日志中捕获这个请求头. nginx日志配置 只需要用变量http ...
- [windows]远程桌面失败提示CredSSP加密修正
前言 windows远程桌面失败,提示"CredSSP加密--" 远程桌面服务器的系统版本:Windows Server 2016 本地电脑的系统版本:Windows 10 方式1 ...
- SpringBoot3分库分表
标签:ShardingSphere5.分库.分表: 一.简介 分库分表的设计和实现方式,在之前的内容中总结过很多,本文基于SpringBoot3和ShardingSphere5框架实现数据分库分表的能 ...
- Redis专题-队列
Redis专题-队列 首先,想一想 Redis 适合做消息队列吗? 1.消息队列的消息存取需求是什么?redis中的解决方案是什么? 无非就是下面这几点: 0.数据可以顺序读取 1.支持阻塞等待拉取消 ...
- C++ ASIO 实现异步套接字管理
Boost ASIO(Asynchronous I/O)是一个用于异步I/O操作的C++库,该框架提供了一种方便的方式来处理网络通信.多线程编程和异步操作.特别适用于网络应用程序的开发,从基本的网络通 ...
- 怎么选择API接口来获取自己想要的数据
在今天的数字时代,数据变得越来越重要,API接口也成为了获取数据的一种重要方式.无论是开发自己的应用程序还是进行市场营销,数据的获取都是非常必要的.但是,如何选择API接口来获取自己想要的数据呢? 以 ...