AtCoder Beginner Contest 388(补题)

news/2025/1/11 23:34:40/文章来源:https://www.cnblogs.com/califeee/p/18666374

AtCoder Beginner Contest 388(补题)

整体如果比上次多做一个题叫进步的话,那还是有点进步的。

C - Various Kagamimochi

https://atcoder.jp/contests/abc388/tasks/abc388_c

思路(Trick)

因为序列是有序的,所以从左到右枚举每一个 i ,找到第一个大于等于 2*i 的数,此数和右边所有的数都满足条件。简单计数即可。

代码1:二分法 O(n * log n)

#include <bits/stdc++.h>typedef std::pair<long long, long long> pll;
typedef std::pair<int, int> pii;
#define INF 0x3f3f3f3f
#define MOD 998244353
using i64 = long long;
const int N = 1e5+5;void solve(){int n;std::cin >> n;std::vector<i64> v(n+1);for (int i = 1; i <= n; i++) std::cin >> v[i];i64 ans =  0;for (int i = 1; i <= n; i++){int a = v[i];int pos = std::lower_bound(v.begin()+1, v.end(), a * 2) - v.begin();ans += n - pos + 1;}std::cout << ans << '\n';
}signed main()
{std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cout<<std::setiosflags(std::ios::fixed)<<std::setprecision(2);int t = 1, i;for (i = 0; i < t; i++){solve();}return 0;
}

代码2:双指针 O(n)

#include<bits/stdc++.h>
using namespace std;
const int N=6e5+5,N1=3e5+5;
int n,a[N],s,t,f[N],dis[N],is[N];
vector<int>ve[N];
bool vis[N];
/*int gcd(int x,int y){//最大公因数if(x%y==0)return y;else return gcd(y,x%y);
}*/void init(int n){for(int i=2;i <=n; i++)is[i]= true;for(int i=2;i<=n;i++){if(!is[i])continue ;for(int j=i*2;j<= n;j += i){is[j]= false;}}
}
int main(){int n;cin >> n;for (int i = 1; i <= n; i++) cin >> a[i];sort(a + 1, a + 1 + n);int l = 1, r = 1;long long ans = 0;while (l <= n) {while (r <= n && a[r] < a[l] * 2) r++;ans += n - r + 1;l++;}cout << ans << endl;return 0;
}

D - Coming of Age Celebration

https://atcoder.jp/contests/abc388/tasks/abc388_d

思路(差分)

此题分为接收石头和传递石头两个过程,考虑接收的石头的时候要知道左边的石头是怎样传递的,所以我们直接思考传递石头。

假设 i 位置在接收完石头后有 a_i 个,则说明他要向右传递 min(a_i, n - i)个石头,一个位置一个,最终结果是对一个区间做了+1操作。但是我们在计算一个位置向右传递多少石头时需要先接收石头,接收石头很明显对应差分的结算操作,结算完后又要向右修改,但是差分只能等所有修改都结束后才能结算,所以差分貌似是不可行的。我们再仔细思考一下。

差分的确是要修改完后再通过前缀和结算,但是这里的情况是,当我们使用前缀和结算到一个位置时,他的值已经确定了,不会再改变,所以是满足差分的性质的。

所以这道题的做法就是边用差分边修改边结算。

评述

本次最大遗憾,明明想到了差分但是把题想成了边改边结算的题,所以没有实现。

代码

#include <bits/stdc++.h>typedef std::pair<long long, long long> pll;
typedef std::pair<int, int> pii;
#define INF 0x3f3f3f3f
#define MOD 998244353
using i64 = long long;
const int N = 1e5+5;void solve(){int n;std::cin >> n;std::vector<int> v(n+1);for (int i = 1; i <= n; i++) std::cin >> v[i];std::vector<int> d(n+1);for (int i = 1; i <= n; i++){// 前缀和d[i] += d[i-1];v[i] += d[i];// 差分int t = std::min(v[i], n-i);v[i] -= t;d[i+1] += 1;d[i+1+t] -= 1;std::cout << v[i] << ' ';}	
}signed main()
{std::ios::sync_with_stdio(false);std::cin.tie(nullptr);std::cout<<std::setiosflags(std::ios::fixed)<<std::setprecision(2);int t = 1, i;for (i = 0; i < t; i++){solve();}return 0;
}

E - Simultaneous Kagamimochi

https://atcoder.jp/contests/abc388/tasks/abc388_e

思路(二分)

假设同时做 i 个蛋糕可行,那么同时做 i - 1 个蛋糕很明显是可行的,所以这道题满足单调性,可以使用二分法。现在要解决的无非就是check函数。

我们可以贪心的想,对于一个序列我们能做 i 个蛋糕,做我们一定是拿这个序列最小的 i 个数和最大的 i 个数做尝试。接下来看代码就行。

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn = 2e6 + 5;
int d[maxn], a[maxn];
int n;
bool check(int x) {for (int i = 1; i <= x; i++) {if (a[i] * 2 > a[n - x + i]) return false;}return true;
}int main(){cin >> n;for (int i = 1; i <= n; i++) cin >> a[i];sort(a + 1, a + 1 + n);int l = 0, r = n / 2;while (l < r) {int mid = l + r + 1 >> 1;if (check(mid)) l = mid;else r = mid - 1;}cout << l << endl;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/867962.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《安全测试指南》——身份管理测试【学习笔记】

【身份管理测试】 1. 角色定义测试(OTG-IDENT-001) 测试方法:即纵向越权。 2.用户注册流程测试(OTG-IDENT-002)(括号内容为个人理解) 测试方法: 1)验证用户注册的身份要求与业务和安全要求一致 是否任何人都能注册访问?(是否需要内部人员或是特定证件才可注册)是否…

【pcap文件】TCP重传与重叠碎片

#pcap文件 网络流量数据包捕获是网络安全领域的重要部分,而pcap文件则是这一过程的常见载体。为了深入解析pcap文件中潜在的可疑网络流量,我们需要运用强大的网络安全威胁评估与审计工具。这些工具能够帮助我们捕捉、记录、检测和诊断网络中的数据传输问题,及时发现异常活动…

【pcap文件】ARP中毒

#pcap文件 网络流量数据包捕获是网络安全领域的重要部分,而pcap文件则是这一过程的常见载体。为了深入解析pcap文件中潜在的可疑网络流量,我们需要运用强大的网络安全威胁评估与审计工具。这些工具能够帮助我们捕捉、记录、检测和诊断网络中的数据传输问题,及时发现异常活动…

【pcap文件】TTL过期攻击

#pcap文件 网络流量数据包捕获是网络安全领域的重要部分,而pcap文件则是这一过程的常见载体。为了深入解析pcap文件中潜在的可疑网络流量,我们需要运用强大的网络安全威胁评估与审计工具。这些工具能够帮助我们捕捉、记录、检测和诊断网络中的数据传输问题,及时发现异常活动…

《docker基础篇:2.Docker安装》包括前提说明、Docker的基本组成、Docker平台架构图解(架构版)、安装步骤、阿里云镜像加速、永远的HelloWorld、底层原理

《docker基础篇:2.Docker安装》包括前提说明、Docker的基本组成、Docker平台架构图解(架构版)、安装步骤、阿里云镜像加速、永远的HelloWorld、底层原理@目录2.Docker安装2.1前提说明2.2Docker的基本组成2.3Docker平台架构图解(架构版)2.3.1Docker平台架构图解(入门版)2.3.2Do…

【逆向】查看APK文件源代码

1、先生成jar包 首先将apk修改文件名为zip或rar 首先将apk文件修改后缀名为zip,然后解压缩,得到解压之后的文件夹,文件夹中有一个classes.dex文件(这个文件就是java文件编译再通过dx工具打包而成的)zip->jar 接下来使用dex2jar:将apk反编译成java源码(classes.dex转化成…

读取HTTP首部

问题 希望读取一个HTTP请求首部。 解决方案 要读取一个首部,可以查看$_SERVER超级全局变量数组: //User-Agent首部 echo $_SERVER[HTTP_USER_AGENT]; 要读取所有首部,可以调用getallheaders(): $headers = getallheaders(); foreach($headers as $a=>$b){ print "$a:…

工地反光衣穿戴智能监测摄像机

工地反光衣穿戴智能监测摄像机系统通过技术创新和智能化应用,为建筑工地的安全管理提供了全新的解决方案。未来,随着技术的不断进步和应用场景的扩展,相信这类系统将在全球范围内得到广泛应用,为工人的安全作业提供更加可靠的保障和支持。在现代社会,建筑工地是高风险的工…

手把手带你搭建CI/CD工作流

一、什么是CI/CD? 持续集成(ContinousIntergration,CI)是在源代码变更后自动检测、拉取、构建和进行自动化测试的过程,属于开发人员的自动化流程。 该解决方案可以解决在一次开发中有太多应用分支,从而导致相互冲突的问题。其基本思路是,自动化监测代码仓库的变化并拉取…

非法闯入智能监测摄像机

非法闯入智能监测摄像机具备多项显著优势。首先,它能够智能分析画面中的人物和物体,通过对比数据库识别可疑目标,自动过滤正常活动,减少误报。其次,这些摄像机通常具备夜视功能和高清画质,确保在各种光线条件下都能清晰记录可疑行为。此外,很多智能摄像机支持远程监控,…

Java基础学习(六)

Java基础学习(六):面向对象 目录Java基础学习(六):面向对象概念类的结构对象的创建与初始化内存分析封装继承多态Instanceof 和 类型转换Static 关键字抽象类接口内部类 本文为个人学习记录,内容学习自 狂神说Java概念面向过程 vs 面向对象面向过程步骤清晰简单,第一步…

自如电费欺诈,屡教不改 All In One

自如电费欺诈,屡教不改 All In One 自如电费欺诈 常见手段汇总 💩 电表示数,自如抄表时候故意多抄、错抄! 导致使用电量和电费暴增,与国家电网 app 查询的实际使用量完全不一致!不严格按照国家和地方的居民电费分档计费标准的价格收费,随意向上跨档高价收费、多收费! …