Codeforces Round 895 (Div. 3)(A~G)

A. Two Vessels

Problem - A - Codeforces

要我们找到最少操作多少次,a和b内的水一样多,从a拿出i克放到b中,之间的差距减少2i,数据范围不大,循环解决即可。

#include<iostream>
#include<algorithm>
#include<queue>
#include<math.h>
#include<cstring>
#include<set>
#include<map>
#define int long long
#define TEST int T;cin>>T;while(T--)
#define lowbit(x) x&(-x)
using namespace std;
const int N = 200010;
const int M = 1e9 + 7;
const int bit = 63;
inline void solve() {int a,b,c;cin>>a>>b>>c;int k=abs(a-b);int ans=0;if(a==b){cout<<"0\n";return;}while(k>0){ans++;k-=2*c;}cout<<ans<<"\n";
}
signed main() {TESTsolve();return 0;
}

B. The Corridor or There and Back Again

Problem - B - Codeforces

依次遍历每个房间,找到从这个房间开始最多前进到最大的房间是多少,依次记录最小值。

#include<iostream>
#include<algorithm>
#include<queue>
#include<math.h>
#include<cstring>
#include<set>
#include<map>
#define int long long
#define TEST int T;cin>>T;while(T--)
#define lowbit(x) x&(-x)
using namespace std;
const int N = 200010;
const int M = 1e9 + 7;
const int bit = 63;
struct node
{int d,s;
}e[N];
bool cmp(node a,node b)
{return a.d<b.d;
}
inline void solve() {int n;cin>>n;for(int i=1;i<=n;i++) cin>>e[i].d>>e[i].s;sort(e+1,e+1+n,cmp);int mi=1e9;for(int i=1;i<=n;i++){if(e[i].d>=mi) continue;mi=min(mi,e[i].d+(e[i].s-1)/2);}cout<<mi<<"\n";
}
signed main() {TESTsolve();return 0;
}

C. Non-coprime Split

Problem - C - Codeforces

我们用贪心的办法解决,一个大于3的偶数肯定能分成两个部分,并且他们的最小公约数不为1,当出现L等于R的情况,并且L是质数,则不能满足题目要求,反之我们暴力枚举找到。

#include<bits/stdc++.h>
#define int long long
#define TEST int T;cin>>T;while(T--)
#define lowbit(x) x&(-x)
using namespace std;
const int N = 200010;
const int M = 1e9 + 7;
const int bit = 63;
int prime(int x)
{if(x<=1) return 0;for(int i=2;i*i<=x;i++){if(x%i==0) return 0;}return 1;
} 
inline void solve() {int l,r;cin>>l>>r;for(int i=l;i<=r;i++){if(i>=4&&i%2==0){cout<<2<<" ";cout<<i-2<<"\n"; return;}}if(l==r){if(!prime(l)){for(int i=2;i<=l/2;i++){int j=l-i;if(__gcd(i,j)!=1){cout<<i<<" "<<j<<"\n";return;} }}}cout<<"-1\n";}
signed main() {TESTsolve();return 0;
}

D. Plus Minus Permutation

Problem - D - Codeforces

n除以x可以找到x在1到n中可以占几个位置,同理也能找到y在1到n中占几个为止,n除以x和t的最小公倍数可以这个共同位置,这样就可以用贪心解决,x单独占的位置我们设为尽可能大,y占的位置我们设为尽可能小,共同位置不讨论,最后得到正确答案。

#include<bits/stdc++.h>
#define int long long
#define TEST int T;cin>>T;while(T--)
#define lowbit(x) x&(-x)
using namespace std;
const int N = 200010;
const int M = 1e9 + 7;
const int bit = 63;
inline void solve() {int n,x,y;cin>>n>>x>>y;int t=__gcd(x,y);t=x*y/t;int num1=n/x,num2=n/y,num3=n/t;num1-=num3;num2-=num3;int ans=(n-num1+1+n)*num1/2;ans-=(1+num2)*num2/2;cout<<ans<<"\n";}
signed main() {TESTsolve();return 0;
}

E. Data Structures Fan

Problem - E - Codeforces

在写这个题的时候可以了解一下异或的一下公式。

a^a=0

a^0=a

所以我们可以知道,当我们在选择区间L和R时,无非就是将答案异或整个区间。

#include<bits/stdc++.h>
#define int long long
#define TEST int T;cin>>T;while(T--)
#define lowbit(x) x&(-x)
using namespace std;
const int N = 200010;
const int M = 1e9 + 7;
const int bit = 63;
int a[N],sum[N];
inline void solve() {int n;cin>>n;int ans=0;for(int i=1;i<=n;i++) {cin>>a[i];}string s;cin>>s;int q;cin>>q;s='8'+s;for(int i=1;i<=n;i++){if(s[i]=='1') ans^=a[i];sum[i]=sum[i-1]^a[i];}for(int i=1;i<=q;i++){int x;cin>>x;if(x==2){int  flag;cin>>flag;if(flag==1){cout<<ans<<"\n";}else cout<<(ans^sum[n])<<"\n";}else{int l,r;cin>>l>>r;ans^=sum[l-1]^sum[r]; }}
}
signed main() {TESTsolve();return 0;
}

F. Selling a Menagerie

Problem - F - Codeforces

其实就是i向a[i]建一条有向边,利用拓扑排序将入度为0的点先输出,因为他们没有任何动物害怕,所以直接输出即可,后面就会留下n个联通块,我们按照贪心,牺牲价值最小的,而一个联通块中其余都可与以两倍价格卖出。

拓扑排序:去除入度为0的点

并查集:查找联通块

从每个联通块价值最小的点出发,遍历并且输出完整个联通块的点,最后输出自己,最终得到最优序列。

#include<bits/stdc++.h>
#define int long long
#define TEST int T;cin>>T;while(T--)
#define lowbit(x) x&(-x)
using namespace std;
const int N = 200010;
const int M = 1e9 + 7;
const int bit = 63;
int a[N],c[N],cnt,x[N],y[N],head[N],v[N],pre[N],b[N],mi[N];
int n;
struct node
{int v,id;
}e[N];void add(int u,int v)
{x[++cnt]=v;y[cnt]=head[u];head[u]=cnt;
}
int Find(int x)
{if(x==pre[x]) return x;return pre[x]=Find(pre[x]);
}
void clear()
{cnt=0;for(int i=1;i<=n;i++) head[i]=x[i]=y[i]=v[i]=a[i]=mi[i]=0;
}
inline void solve() {cin>>n;for(int i=1;i<=n;i++) {cin>>b[i];add(i,b[i]);a[b[i]]++;}for(int i=1;i<=n;i++){cin>>c[i];pre[i]=i;}//找到入队为0的点queue<int>q;for(int i=1;i<=n;i++){if(a[i]==0) {q.push(i);}} while(!q.empty()){int k=q.front();q.pop();v[k]=1;cout<<k<<" ";for(int i=head[k];i;i=y[i]){int t=x[i];a[t]--;if(a[t]==0)q.push(t);}}vector<node>f;for(int i=1;i<=n;i++){if(v[i]==0){pre[Find(i)]=Find(b[i]);//寻找连通块 }}for(int i=1;i<=n;i++){if(v[i]==0&&(!mi[Find(i)]||c[mi[pre[i]]]>c[i])){mi[pre[i]]=i;}}for(int i=1;i<=n;i++){if(v[i]==0&&i==mi[pre[i]]){for(int j=b[i];j!=i;j=b[j]){cout<<j<<" ";}cout<<i<<" ";}}cout<<"\n";clear();}
signed main() {TESTsolve();return 0;
}

G. Replace With Product

Problem - G - Codeforces

选择一对区间,将区间所有数变成区间数的乘积,保证最大化最后数组各个元素的和。

利用贪心我们发现我们的边界肯定不能为1,所以我们把每个不为1的位置找到,在这些点内暴力枚举。

查看数据范围,我们可以知道每个数之和最大不大于2x10^5x10^9,所以我们从头开始累乘,直到大于这个值时,我们就输出左右两侧不为1的点的位置,这是最优的。

现在开始暴力枚举,用值记录选择两个边界能给数组增加的值,一直更新最大值和最优区间。

#include<bits/stdc++.h>
#define int long long
#define TEST int T;cin>>T;while(T--)
#define lowbit(x) x&(-x)
using namespace std;
const int N = 200010;
const int M = 2e14+10;
const int bit = 63;
inline void solve() {int n,sum=0;cin>>n;vector<int>a(n+1);vector<int>pos;for(int i=1;i<=n;i++) {cin>>a[i];if(a[i]!=1) pos.push_back(i);sum+=a[i];}int l=1,r=n;while(a[l]==1) l++;while(a[r]==1) r--;if(l>=r){cout<<1<<" "<<1<<"\n";return;}int res=1;for(int i=1;i<=n;i++){res*=a[i];if(res>=1e9){cout<<l<<" "<<r<<"\n";return;}} //开始暴力枚举int L=1,R=1,ans=sum;for(int i=0;i<pos.size();i++) {int cnt=1,s=0;for(int j=i;j<pos.size();j++){int l=pos[i],r=pos[j];cnt*=a[r];s+=a[r]-1;int now=sum-(r-l+1)-s+cnt;if(now>ans){L=l,R=r;ans=now;}}}cout<<L<<" "<<R<<"\n";
}
signed main() {TESTsolve();return 0;
}

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

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

相关文章

推荐算法——MRR

定义&#xff1a; MRR计算的是第一个正确答案的排名的倒数&#xff0c;并对所有查询取平均值。它衡量了模型在排序结果中快速找到正确答案的能力。 其中&#xff1a; Q 是查询的总数。ranki​ 是第 i 个查询中第一个正确答案的排名&#xff08;位置&#xff09;。如果第一个正…

Django定时任务框架django-apscheduler的使用

1.安装库 pip install django-apscheduler 2.添加 install_app django_apscheduler 3.在app下添加一个task.py文件&#xff0c;用来实现具体的定时任务 task.pydef my_scheduled_job():print("这个任务每3秒执行一次", time.time()) 4.在app下创建一个manag…

我在哪里可以找到Vim速查表备忘单?

以下是一些适合初学者和高级用户的Vim速查表推荐&#xff1a; aral的Vim速查表 这是一个空间感强且易于理解的速查表&#xff0c;帮助你理解每个命令将跳转到的位置。aral的Vim速查表 Vim速查表 如果你需要一个全面且用户友好的速查表&#xff0c;可以访问Vim速查表。这个资源…

Redis 教程:从入门到入坑

目录 1. Redis 安装与启动1.1. 安装 Redis1.1.1. 在Linux上安装1.1.2. 在Windows上安装 1.2. 启动 Redis1.2.1. 在Linux上启动1.2.2. 在Windows上启动 1.3. 连接Redis1.3.1. 连接本地Redis1.3.2. 连接远程Redis1.3.2.1. 服务器开放端口1.3.2.2. 关闭防火墙1.3.2.3. 修改配置文件…

【QT开发(19)】2023-QT 5.14.2实现Android开发,使用新版SDK,试图支持 emulator -avd 虚拟机

之前的博客【QT开发&#xff08;17&#xff09;】2023-QT 5.14.2实现Android开发&#xff0c;SDK是24.x版本的&#xff0c;虚拟机是32位的&#xff0c;但是现在虚拟机是64位的了&#xff0c;需要升级SDK匹配虚拟机 文章目录 最后的效果1.1 下载最新版 SDK tools (仅限命令行工…

java学习--面向对象三大特征--继承

子类也可以有子类&#xff0c;ed就是子类的子类&#xff0c;也可以是a的子类 package com.extend_test01;public class Extends {public static void main(String[] args) {Pupil pupil new Pupil();pupil.setName("xiao");pupil.setScore(60);pupil.tesing();Syst…

线性回归中的平方损失和正规方程

损失函数 损失函数是用来衡量机器学习模型性能的一个函数。它通过计算模型的预测值与真实值之间的误差&#xff0c;用一个实数来表示这种误差。误差越小&#xff0c;说明模型的性能越好&#xff0c;预测越准确。在确定损失函数之后&#xff0c;通过优化算法求解损失函数的极小值…

初学者如何通过建立个人博客盈利

建立个人博客不仅能让你在网上表达自己&#xff0c;还能与他人建立联系。通过博客&#xff0c;可以创建自己的空间&#xff0c;分享想法和故事&#xff0c;并与有相似兴趣和经历的人交流。 本文将向你展示如何通过建立个人博客来实现盈利。你将学习如何选择博客主题、挑选合适…

阿里云短信PHP集成api类

无需安装sdk扩展包&#xff0c;直接引入类即可使用 V3版本请求体&签名机制:自研请求体和签名机制 - 阿里云SDK - 阿里云 模版内容&#xff1a; <?phpnamespace common\components;use common\constant\UserConst; use common\models\bee\SmsReferer; use common\mode…

Python成像质谱流式细胞术病理生理学

&#x1f3af;要点 &#x1f3af;急性呼吸窘迫综合征病理生理学 | &#x1f3af;获取高度多重空间分辨数据 | &#x1f3af;临床注释病理学景观 | &#x1f3af;使用医学院病理学系提供的组织样本 | &#x1f3af;设计抗体组捕获不同免疫和基质区室 | &#x1f3af;获取适合代…

EXCEL的自定义功能

一、Excel文件获取 OFFICE中导入文本文件&#xff0c;CSV&#xff08;分隔符通常是逗号&#xff09;和TXT&#xff08;分隔符通常是Tab键&#xff0c;可以用记事本打开查看分隔符&#xff09;进入单元格&#xff0c;数据——获取外部数据——自文本。 WPS中数据——获取数据——…

如何在Mac下修改VSCode侧边栏字体大小

在日常使用VSCode&#xff08;Visual Studio Code&#xff09;进行开发时&#xff0c;我们有时需要对IDE&#xff08;集成开发环境&#xff09;的界面进行一些个性化的调整&#xff0c;以提升我们的开发体验。 比如&#xff0c;有些用户可能会觉得VSCode的侧边栏字体大小不符…

JDK新特性(Lambda表达式,Stream流)

Lambda表达式&#xff1a; Lambda 表达式背后的思想是函数式编程&#xff08;Functional Programming&#xff09;思想。在传统的面向对象编程中&#xff0c;程序主要由对象和对象之间的交互&#xff08;方法调用&#xff09;构成&#xff1b;而在函数式编程中&#xff0c;重点…

打破运维“冷门槛“|暴雨液冷数据中心方案再升级

如果将数据比喻为驱动世界运转的新引擎&#xff0c;那数据中心便是为引擎提供源源不断动力的泵站。但随着泵站功率的日益增强&#xff0c;热浪成了不可避免的副产品。如何将数据热能转化为科技动能&#xff0c;是人工智能可持续发展的重要前提。 液冷技术&#xff0c;不仅可实现…

SD-WAN组网搭建5G备份方案实现方式

SD-WAN&#xff08;Software-Defined Wide Area Network&#xff0c;软件定义广域网&#xff09;结合5G作为备份链路是现代企业网络弹性策略的一部分&#xff0c;尤其是在需要高可用性和快速故障切换的场景下。以下是实现SD-WAN组网并集成5G备份方案的一般步骤&#xff1a; 1. …

【细如狗】记录一次使用MySQL的Binlog进行数据回滚的完整流程

文章目录 1 事情起因2 解决思路3 利用binlog进行数据回滚3.1 确认是否启用Binlog日志3.2 确认是否有binlog文件3.3 找到误操作的时间范围3.4 登录MySQL服务器查找binlog文件3.4.1 查询binlog文件路径3.4.2 找到binlog文件3.4.3 确认误操作被存储在哪一份binlog文件中 3.5 查看二…

用杰理芯片发不出100hz~1200hz频率的PWM波

思路&#xff1a; 问原厂工程师 回复&#xff1a; 看下是不是数据做除法的时候越界了&#xff0c;如果有用户手册&#xff0c;直接看下那几个定时器的寄存器算下就知道为什么 芯片&#xff1a; AD155A 行动&#xff1a; 相关文档和代码&#xff1a; TMR_PR&#xff1a;1…

打卡WAIC 2024!中兴的AI科技好牛

前几天去现场参观了2024世界人工智能大会展览&#xff08;WAIC 2024&#xff09;&#xff0c;突然感受到AI浪潮真的是在正在汹涌而来&#xff0c;大会上聚集了全球各种大型科技企业&#xff0c;“黑科技”一个接一个。中兴作为咱们中国企业&#xff0c;在这场大会上也很争气&am…

MySQL双主双从实现方式

双主双从&#xff08;MM-SS&#xff09; 前言 避免单一主服务器宕机&#xff0c;集群写入能力缺失 从 1 复制 主1 &#xff0c;从 2 复制 主 2 主 1 复制 主 2&#xff0c;主 2 复制主 1 也就是 主 1 和主 2 互为主从。主1主2互为主从&#xff0c; 是为了以下情景&#xff0c…

git使用以及理解

git练习网站 Learn Git Branching git操作大全Oh Shit, Git!?! git commit git branch name git merge bugFix 合并俩个分支 git rebase main git checkout headgit switch head 会导致HEAD分离 &#xff0c;就是指head->HEAD->c1 相对引用 ------------------- …