2024.11.17 Codeforces Round 988 (Div. 3)

Solved:7/7

Penalty:184

Rank:21

比赛链接

好水的 Div.3。。。甚至 G 是原题绷不住了()


A. Twice

题意:给一个序列,相同的两个数可以配对消除,求最多消除的次数。

直接开桶。

#include<bits/stdc++.h>
using namespace std;void solve(){int n;cin>>n;vector<int> c(n+1);int ans=0;for(int i=0,x;i<n;++i){cin>>x,++c[x];if(c[x]==2)c[x]=0,++ans;}cout<<ans<<'\n';
}int main(){ios::sync_with_stdio(0);cin.tie(0);int T;cin>>T;while(T--)solve();
}

B. Intercepted Inputs

题意:给一个 \(n\times m\) 的矩阵,但其所有输入(包括 \(n\)\(m\))都被打乱,要还原 \(n,m\)

枚举 \(k-2\) 的约数看是否在输入中。

#include<bits/stdc++.h>
using namespace std;void solve(){int k;cin>>k;vector<int> c(k+1);for(int i=0,x;i<k;++i)cin>>x,++c[x];int m=k-2;for(int i=1;i*i<=m;++i)if(!(m%i)){if(i!=m/i){if(c[i]&&c[m/i]){cout<<i<<' '<<m/i<<'\n';return;}}else{if(c[i]>=2){cout<<i<<' '<<i<<'\n';return;}}}
}int main(){ios::sync_with_stdio(0);cin.tie(0);int T;cin>>T;while(T--)solve();
}

C. Superultra's Favorite Permutation

题意:构造一个长度为 \(n\) 的排列,使相邻两数之和为合数。

注意到偶数必为合数,而我们可以先排偶数再排奇数使只有一个位置相邻奇偶性不同(另一方面,至少有一个位置相邻奇偶性不同)。

而最小的合数为 \(9=4+5\),故 \(n\leq 4\) 均无解。对 \(n\geq 5\),前面放偶数后面放奇数再把 \(4\)\(5\) 放到一起即可。

#include<bits/stdc++.h>
using namespace std;void solve(){int n;cin>>n;if(n<=4)cout<<"-1\n";else{for(int i=n/2*2;i>=6;i-=2)cout<<i<<' ';cout<<"2 4 5 1 3 ";for(int i=7;i<=n;i+=2)cout<<i<<' ';cout<<'\n';}
}int main(){ios::sync_with_stdio(0);cin.tie(0);int T;cin>>T;while(T--)solve();
}

D. Sharky Surfing

题意:在数轴上从 \(0\) 跳到 \(L\),跳跃能力初始为 \(1\)。假设当前跳跃能力为 \(k\),则你可以跳至多 \(k\) 的距离。某些区间不能落地,某些位置有加速器可以增加你的跳跃能力。问至少需要捡多少个加速器(可以经过加速器但不捡)。

按加速器的位置枚举,用大根堆维护可以捡的加速器。遇到一个区间就用加速器直到 \(k\geq r-l+2\)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
#define all(x) (x).begin(),(x).end()void solve(){int n,m,L;cin>>n>>m>>L;vector<int> l(n),r(n);vector<pii> a(m);for(int i=0;i<n;++i)cin>>l[i]>>r[i];for(int i=0;i<m;++i)cin>>a[i].first>>a[i].second;sort(all(a));++m,a.push_back({L,0});priority_queue<int> pq;int res=0;ll sum=1;for(int i=0,j=0;i<m;++i){while(j<n&&a[i].first>=l[j]){while(i<m&&a[i].first<=r[j])++i;while(!pq.empty()&&sum<r[j]-l[j]+2)sum+=pq.top(),pq.pop(),++res;if(sum<r[j]-l[j]+2){cout<<"-1\n";return;}++j;}pq.push(a[i].second);}cout<<res<<'\n';
}int main(){ios::sync_with_stdio(0);cin.tie(0);int T;cin>>T;while(T--)solve();
}

E. Kachina's Favorite Binary String

题意:交互题。你要猜一个长度为 \(n\) 字符串(\(n\) 给定),每次可以询问它的某个子串有多少个子序列为01。最多询问 \(n\) 次。

依次询问 \((1,2),(1,3),\dots,(1,n)\)。答案比上一次询问多则这一位是 \(1\) 否则是 \(0\)

设第一个非 \(0\) 的位(设为 \(p\))答案是 \(k\),则前面是 \(p-k-1\)\(1\)\(k\)\(0\)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
#define all(x) (x).begin(),(x).end()int qry(int l,int r){cout<<"? "<<l<<' '<<r<<endl;int x;cin>>x;return x;
}void solve(){int n;cin>>n;int pos=0,now=0,z=0;string ans;ans.resize(n);for(int i=2;i<=n;++i){int nxt=qry(1,i);if(nxt>now){ans[i-1]='1';if(!pos)pos=i,z=nxt;}else ans[i-1]='0';now=nxt;}if(!pos){cout<<"! IMPOSSIBLE"<<endl;return;}for(int i=1;i<=pos-z-1;++i)ans[i-1]='1';for(int i=pos-z;i<=pos-1;++i)ans[i-1]='0';cout<<"! "<<ans<<endl;
}int main(){int T;cin>>T;while(T--)solve();
}

F. Ardent Flames

题意:有 \(n\) 个敌人,第 \(i\) 个敌人位置为 \(x_i\) 血量为 \(h_i\)。你可以向同一个位置 \(p\) 扔若干个炸弹,每个炸弹会对位置为 \(x\) 的敌人造成 \(\max\{0,m-|p-x|\}\) 的伤害。求消灭 \(k\) 个敌人所需最少的炸弹数。

二分答案,设扔了 \(w\) 个炸弹,则第 \(i\) 个敌人需要被每个炸弹造成 \(t_i=\lceil \frac {h_i}w\rceil\) 的伤害。那么消灭这个敌人需要炸弹落在 \([x_i-(m-t_i),x_i+(m-t_i)]\) 之间的位置(\(t_i>m\) 则无法消灭)。

问题转化为给 \(n\) 个区间问是否存在一个位置被覆盖 \(\geq k\) 次。离散化+差分即可。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
#define all(x) (x).begin(),(x).end()void solve(){int n,m,k;cin>>n>>m>>k;vector<int> h(n),x(n);for(int i=0;i<n;++i)cin>>h[i];for(int i=0;i<n;++i)cin>>x[i];auto chk=[&](int w)->bool {vector<int> t(n),buc;for(int i=0;i<n;++i){t[i]=(h[i]+w-1)/w;if(t[i]<=m){buc.push_back(x[i]-m+t[i]);buc.push_back(x[i]+m-t[i]+1);}}sort(all(buc));buc.resize(unique(all(buc))-buc.begin());vector<int> c(buc.size());for(int i=0;i<n;++i){if(t[i]<=m){int l=lower_bound(all(buc),x[i]-m+t[i])-buc.begin();int r=lower_bound(all(buc),x[i]+m-t[i]+1)-buc.begin();++c[l],--c[r];}}for(int i=1;i<buc.size();++i)c[i]+=c[i-1];for(int i=0;i<buc.size();++i)if(c[i]>=k)return 1;return 0;};int l=1,r=1e9,ans=-1;while(l<=r){int mid=(l+r)>>1;if(chk(mid))ans=mid,r=mid-1;else l=mid+1;}cout<<ans<<'\n';
}int main(){ios::sync_with_stdio(0);cin.tie(0);int T;cin>>T;while(T--)solve();
}

G. Natlan Exploring

原题:这场的 J

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

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

相关文章

【待发】CyberEdge:简洁而强大的互联网资产测绘工具

免责声明 利⽤本文所提供的信息而造成的任何直接或者间接的后果及损失,均由使⽤者本⼈负责,创作者及作者不为此承担任何责任,一旦造成后果请自行承担责任!简介: CyberEdge是一款精心设计的互联网资产测绘工具,为网络安全专业人士提供精准、高效的扫描体验。 核心特性: 全…

Spring Security 认证授权(黑马讲义)

1.基本概念 1.1.什么是认证 用户认证就是判断一个用户的身份是否合法的过程,用户去访问系统资源时系统要求验证用户的身份信息,身份合法方可继续访问,不合法则拒绝访问。常见的用户身份认证方式有:用户名密码登录,二维码登录,手机短信登录,指纹认证等方式。 1.2.什么是授…

SkyWalking 安装部署操作指引

环境 CentOS-7-x86_64-DVD-2009.iso https://mirrors.aliyun.com/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-2009.iso apache-skywalking-apm-10.0.1.tar.gz https://dlcdn.apache.org/skywalking/10.0.1/apache-skywalking-apm-10.0.1.tar.gz jdk-11.0.23_linux-x64_bin.tar.…

Win11 24H2 使用Rclone将SMB协议链接转为本地磁盘驱动器

9月份升级了ITX主机,多了好几块机械硬盘, 后来又买了Nas, 先装了飞牛Nas系统, 结果要格盘,考虑到Refs, Zfs, exFAT 在坏盘情况对数据恢复不友好, 决定改用Win11作为Nas 系统 .Windows 做Nas 系统不要太好, 免去各类docker 的缓慢和配置,可以正常使用迅雷等各类软件,并且很多Nas…

在Keil中使用ST-LINK烧录STM32程序指南

前言 之前玩STM32都是用J-LINK烧录程序,不仅便捷,而且烧录的速度比用串口快好多。 最近我接了几个32单片机的毕设单子,便买了几块C8T6的最小系统板用来开发。最初我还是用J-LINK烧录C8T6的,只要从J-LINK中找出对应的引脚用杜邦线连上就可以烧录,但是每晚要去学校的实验室,…

第八章习题

学号后四位:3018 8.4:点击查看代码 import numpy as np from scipy.integrate import odeint import matplotlib.pyplot as plt# 定义微分方程组 def differential_equations(state, t):x, y = statedxdt = -x ** 3 - ydydt = x - y ** 3return [dxdt, dydt]# 设定初始条件 ini…

Next App Router 模式下,如何同步服务端 Redux 初始状态?

大家的阅读是我发帖的动力,本文首发于我的博客:deerblog.gu-nami.com/,欢迎大家来玩,转载请注明出处喵。🎈前言 Next.js 是一个广受欢迎的 React 服务端渲染(Server Side Rendering,SSR)框架。Next.js 的页面会先在服务端渲染一次,然后把结果传给浏览器,也就是客户端…

Git版本管理系统快速上手指南

作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 目录一.git命令初体验1.搭建Golang开发环境2.git init项目初始化3.git status查看工作目录状态4.git add将文件从工作区提交到暂存区5.git config配置git个人信息6.git commit提交代码到本地仓库7.git log查看…

Air201模组入门:掌握SPI读写外部Flash的技巧

今天带领大家通过Air201+扩展板读写外部flash的演示,教你使用SPI示例,可根据实际需求灵活应用。今天带领大家通过Air201+扩展板读写外部flash的演示,教你使用SPI示例,可根据实际需求灵活应用。 我们先了解一些相关基础知识: SPI(Serial Peripheral Interface)——是一种…

第七章习题

学号后四位:3018 7.3:点击查看代码 import numpy as np import matplotlib.pyplot as plt from scipy.interpolate import interp1d, CubicSplineT = np.array([700, 720, 740, 760, 780]) V = np.array([0.0977, 0.1218, 0.1406, 0.1551, 0.1664])# 线性插值 linear_interp = …

6502 指令译码器

引言 CPU 要执行指令需要先识别指令,弄清楚要执行的指令是什么类型、需要几个周期、操作数在哪里、目的地在哪里等信息,才能在后续的指令执行过程中打开对应的数据通路。“识别指令”的过程叫译码,完成指令识别功能的机构,叫译码器。 两个译码器 因为 6502 CPU 有一个两级流…