Codeforces Round 665 (Div. 2) (A-F)

A.Problem - A - Codeforces

        (1)题意

                给你个X轴,初始A点在n这个位置,O在源点0,问你要把B放在哪才能让|AB-BO| = k,最小化A需要移动多少次。

        (2)思路

                直接分情况套路即可。

        (3)代码

#include <bits/stdc++.h>
#define rep(i,z,n) for(int i = z;i <= n; i++)
#define per(i,n,z) for(int i = n;i >= z; i--)
#define PII pair<int,int>
#define fi first
#define se second
#define vi vector<int>
#define vl vector<ll>
#define pb push_back
#define sz(x) (int)x.size()
#define all(x) (x).begin(),(x).end()
using namespace std;
using ll = long long;
const int N = 2e5 + 10;
void solve()
{int n,k;cin >> n >> k;int Ans = 0;if((n + k) & 1) {Ans ++;n ++;}if(k > n) Ans += k - n;cout << Ans << '\n';
}
int main()
{ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);int T = 1;cin >> T;while(T --) solve();return 0;
}

B.Problem - B - Codeforces

        (1)题意

                a序列有x1个0,y1个1,z1个2,b序列有x2个0,y2个1,z2个2,给定你这个函数,问你在任意排序后可以获得的最大价值是多少。

                

        (2)思路

                贪心考虑,肯定是先把有价值的拿了,然后把其他的都给弄成0,否则就只能加上负贡献了。       

        (3)代码

#include <bits/stdc++.h>
#define rep(i,z,n) for(int i = z;i <= n; i++)
#define per(i,n,z) for(int i = n;i >= z; i--)
#define PII pair<int,int>
#define fi first
#define se second
#define vi vector<int>
#define vl vector<ll>
#define pb push_back
#define sz(x) (int)x.size()
#define all(x) (x).begin(),(x).end()
using namespace std;
using ll = long long;
const int N = 2e5 + 10;
void solve()
{int x1,y1,z1;int x2,y2,z2;int Ans = 0;cin >> x1 >> y1 >> z1;cin >> x2 >> y2 >> z2;int mi = min(z1,y2);y2 -= mi,z1 -= mi;Ans += mi * 2;mi = min(z1,z2);z1 -= mi,z2 -= mi;mi = min(z1,x2);z1 -= mi,x2 -= mi;mi = min(y1,y2);y1 -= mi,y2 -= mi;mi = min(y1,x2);y1 -= mi,x2 -= mi;mi = min(x1,z2);x1 -= mi,z2 -= mi;mi = min(x1,y2);x1 -= mi,y2 -= mi;mi = min(y1,y2);y1 -= mi,y2 -= mi;mi = min(x1,x2);x1 -= mi,x2 -= mi;mi = min(z1,z2);z1 -= mi,z2 -= mi;mi = min(y1,z2);Ans -= 2 * mi;cout << Ans << '\n';
}
int main()
{ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);int T = 1;cin >> T;while(T --) solve();return 0;
}

C.Problem - C - Codeforces

        (1)题意

                给你一个长为n的序列,设最小值为Mi,你每次可以选择两个数a[i]和a[j],若gcd(a[i],a[j])=Mi,问你是否可以把这个序列变成不降序列。

        (2)思路

                很显然我们可以直接把%Mi为0的所有数拿出来,从大到小依次放入原序列,最后检查原序列是否不降即可。

        (3)代码

#include <bits/stdc++.h>
#define rep(i,z,n) for(int i = z;i <= n; i++)
#define per(i,n,z) for(int i = n;i >= z; i--)
#define PII pair<int,int>
#define fi first
#define se second
#define vi vector<int>
#define vl vector<ll>
#define pb push_back
#define sz(x) (int)x.size()
#define all(x) (x).begin(),(x).end()
using namespace std;
using ll = long long;
const int N = 2e5 + 10;
int a[N];
void solve()
{int n;cin >> n;int mi = 1e9;vector<int> v;rep(i,1,n) {cin >> a[i];mi = min(mi,a[i]);}rep(i,1,n) {if(a[i] % mi == 0) {v.pb(a[i]);}}sort(v.rbegin(),v.rend());rep(i,1,n) {if(a[i] % mi == 0) {a[i] = v.back();v.pop_back();}}rep(i,2,n) {if(a[i] < a[i - 1]) {cout << "NO" << '\n';return;}}cout << "YES" << '\n';
}
int main()
{ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);int T = 1;cin >> T;while(T --) solve();return 0;
}

D.Problem - D - Codeforces

        (1)题意

                给你棵N个节点的树,和一个总权值K,要你把K分配给这颗树的N-1条边,满足这些树边相乘等于K,并且分配的边权1的数量最少,问你任意两个点的所有边权和加起来最大为多少?

        (2)思路

                我们可以计算出每条边经过多少次,因此考虑贪心分配边权即可,若K分解的质因子大于当前n - 1,则需要把后面的补成1即可,否则可以把多余的补给经过次数最多的那条边即可。

        (3)代码

#include <bits/stdc++.h>
#define rep(i,z,n) for(int i = z;i <= n; i++)
#define per(i,n,z) for(int i = n;i >= z; i--)
#define PII pair<int,int>
#define fi first
#define se second
#define vi vector<int>
#define vl vector<ll>
#define pb push_back
#define sz(x) (int)x.size()
#define all(x) (x).begin(),(x).end()
using namespace std;
using ll = long long;
const int N = 1e5 + 10;
vector<int> g[N];
ll f[N],siz[N];
int n;
const ll mod = 1e9 + 7;
inline void dfs(int u,int f)
{siz[u] = 1;for(auto v : g[u]) {if(v == f) continue;dfs(v,u);siz[u] += siz[v];}
}
void solve()
{   cin >> n;rep(i,1,n) g[i].clear();rep(i,2,n) {int u,v;cin >> u >> v;g[u].pb(v),g[v].pb(u);}int k;cin >> k;vector<ll> z;rep(i,1,k) cin >> f[i];dfs(1,0);rep(i,2,n) z.pb(siz[i] * (n - siz[i]));ll Ans = 0;if(sz(z) >= k) {sort(f + 1,f + 1 + k,[&](ll &c,ll &d){return c > d;});sort(z.rbegin(),z.rend());while(sz(z) > k) f[++ k] = 1;rep(i,1,sz(z)) Ans = (Ans + f[i] * z[i - 1] % mod) % mod;}else {sort(f + 1,f + 1 + k,[&](ll &c,ll &d){return c < d;});sort(z.begin(),z.end());ll tmp = 1,res = k - sz(z);for(int i = k - res + 1;i <= k;i ++) tmp = tmp * f[i] % mod;f[sz(z)] = f[sz(z)] * tmp % mod;rep(i,1,sz(z)) Ans = (Ans + f[i] * z[i - 1] % mod) % mod;}cout << Ans << '\n';
}
int main()
{ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);int T = 1;cin >> T;while(T --) solve();return 0;
}

E.Problem - E - Codeforces

        (1)题意

                给你N条平行X轴的线,和M条平行Y轴的线,保证每一条线都与边框至少有一个交点,且每一条线不重合,问你最后会分出来多少个矩形。

        (2)思路

                这种题目一般是看交点就行了,因此我们观察样例很容易得出结论,答案=交点个数+1+本身交边框有两交点的线。

                那么我们可以用值域树状数组维护出来即可,用树状数组代表横坐标为多少时有一条长度为y的线,然后对于每一条平行Y轴的线做区间查找即可得出交点个数。

        (3)代码实现

#include <bits/stdc++.h>
#define rep(i,z,n) for(int i = z;i <= n; i++)
#define per(i,n,z) for(int i = n;i >= z; i--)
#define PII pair<int,int>
#define fi first
#define se second
#define vi vector<int>
#define vl vector<ll>
#define pb push_back
#define sz(x) (int)x.size()
#define all(x) (x).begin(),(x).end()
using namespace std;
using ll = long long;
const int N = 1e6 + 10;
template <typename T>
struct Fenwick {const int n;std::vector<T> a;Fenwick (int n) : n(n), a(n + 1) {}void add(int pos, T x) {for (int i = pos; i <= n; i += i & -i) {a[i] += x;}}T query(int x) {T res = 0;for (int i = x; i; i -= i & -i) {res += a[i];}return res;}T query(int l, int r) {if (l == 0 || l > r) {return 0;}return query(r) - query(l - 1);}//找到大于k得第一个地方T kth(int k) {int pos = 0;for(int j = 31 - __builtin_clz(n);j >= 0;j --) {if(pos + (1 << j) <= n && k > a[pos + (1 << j)]) {pos += 1 << j;k -= a[pos];}}return pos + 1;}
};
//使用Fenwick<ll> fen(n)
vector<PII> a[N],b[N];
void solve()
{int n,m;cin >> n >> m;Fenwick<int> fen(1000001);ll Ans = 1;rep(i,1,n) {int y1,x1,x2;cin >> y1 >> x1 >> x2;a[x1].pb({y1 + 1,1});a[x2 + 1].pb({y1 + 1,-1});if(x1 == 0 && x2 == 1000000) Ans ++;}rep(i,1,m) {int x1,y1,y2;cin >> x1 >> y1 >> y2;b[x1].pb({y1 + 1,y2 + 1});if(y1 == 0 && y2 == 1000000) Ans ++;}rep(i,0,1000000) {for(auto [x,w]: a[i]) {fen.add(x,w);}for(auto [l,r] : b[i]) {Ans += fen.query(l,r);}}cout << Ans;
}
int main()
{ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);int T = 1;// cin >> T;while(T --) solve();return 0;
}

F.Problem - F - Codeforces

        (1)题意        (2)思路

                第一个操作和第四个操作是线段树基本操作,因此不需要管,重点观察第二个操作和第三个操作,首先这颗线段树是一颗完美二叉树,包含的区间都是2^i次方,对于reverse操作来说,就是把第(k + 1)层线段树的节点的左右儿子交换,那么swap操作,其实也就是对于每一层线段树节点的左右儿子进行交换,那么这个问题就是个简单的线段树了,交换直接在外边维护好就行了。

        (3)代码

#include <bits/stdc++.h>
#define rep(i,z,n) for(int i = z;i <= n; i++)
#define per(i,n,z) for(int i = n;i >= z; i--)
#define PII pair<int,int>
#define fi first
#define se second
#define vi vector<int>
#define vl vector<ll>
#define pb push_back
#define sz(x) (int)x.size()
#define all(x) (x).begin(),(x).end()
using namespace std;
using ll = long long;
const int N = 3e5 + 10;
ll tr[N << 2];
int a[N],rev[N];
inline void build(int u,int l,int r)
{if(l == r) {tr[u] = a[l];return;}int mid = (l + r) >> 1;build(u << 1,l,mid);build(u << 1 | 1,mid + 1,r);tr[u] = tr[u << 1] + tr[u << 1 | 1];
}
inline void modify(int u,int l,int r,int dep,int p,int x)
{if(l == r) {tr[u] = x;return;}int mid = (l + r) >> 1;if(p <= mid) modify(u << 1 ^ rev[dep],l,mid,dep - 1,p,x);else modify(u << 1 | 1 ^ rev[dep],mid + 1,r,dep - 1,p,x);tr[u] = tr[u << 1] + tr[u << 1 | 1];
}
inline ll query(int u,int l,int r,int dep,int ql,int qr)
{if(l >= ql && r <= qr) return tr[u];int mid = (l + r) >> 1;ll s = 0;if(ql <= mid) s += query(u << 1 ^ rev[dep],l,mid,dep - 1,ql,qr);if(qr > mid) s += query(u << 1 | 1 ^ rev[dep],mid + 1,r,dep - 1,ql,qr);return s;
}
void solve()
{int n,q;cin >> n >> q;rep(i,1,(1 << n)) cin >> a[i];build(1,1,(1 << n));while(q --) {int op,l,r;cin >> op;if(op == 1) {cin >> l >> r;modify(1,1,(1<<n),n,l,r);}else if(op == 2) {cin >> l;for(int i = 0;i <= l;i ++) rev[i] ^= 1;}else if(op == 3) {cin >> l;rev[l + 1] ^= 1;}else {cin >> l >> r;cout << query(1,1,(1<<n),n,l,r) << '\n';}}
}
int main()
{ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);int T = 1;// cin >> T;while(T --) solve();return 0;
}

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

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

相关文章

springcloud:四、nacos介绍+启动+服务分级存储模型/集群+NacosRule负载均衡

nacos介绍 nacos是阿里巴巴提供的SpringCloud的一个组件&#xff0c;算是eureka的替代品。 nacos启动 安装过程这里不再赘述&#xff0c;相关安装或启动的问题可以见我的另一篇博客&#xff1a; http://t.csdn.cn/tcQ76 单价模式启动命令&#xff1a;进入bin目录&#xff0…

SpringBoot Validation入参校验国际化

在 Spring Boot 中&#xff0c;可以使用 Validation 和国际化来实现对入参的校验。 常用的校验 NotNull验证字段值不能为 nullNotEmpty验证字段值不能为 null 或空字符串NotBlank验证字符串字段值不能为空、null&#xff0c;并且必须至少包含一个非空白字符Size验证字符串、…

【Spring】Spring 创建和使用

Spring 创建和使用 一. 创建 Spring 项目1. 创建⼀个 Maven 项目2. 添加 Spring 框架⽀持3. 添加启动类 二. 存储 Bean 对象1. 创建 Bean2. 将 Bean 注册到容器 三. 获取并使⽤ Bean 对象1. 创建 Spring 上下文2. 获取指定的 Bean 对象3. 使用 Bean Spring 就是⼀个包含了众多⼯…

SNERT预备队招新CTF体验赛-Web(SWCTF)

目录 1、F12 2、robots 3、game1-喂青蛙 4、game 2 - flap bird 5、game 3 - Clash 6、Get&Post 7、sql &#xff08;1&#xff09;手工注入 &#xff08;2&#xff09;工具注入 8、命令执行漏洞 9、文件上传漏洞 10、文件泄露 11、php反序列化漏洞 12、PHP绕…

Mac安装Ecplise产品报错:dose not contain the JNI_CreateJavaVM symbol

1. 絮絮叨叨 工作中需要借助Ecplise Memory Analyzer (MAT)分析dump文件&#xff0c;直接下载、安装、运行MAT报错 询问同事后&#xff0c;同事说可以先安装Ecplise&#xff0c;再以插件的形式安装MAT下载、安装好Eclipse&#xff0c;点击运行仍然报错&#xff0c;且错误信息一…

【计算机网络笔记六】应用层(三)HTTP 的 Cookie、缓存控制、代理服务、短连接和长连接

HTTP 的 Cookie HTTP 的 Cookie 机制要用到两个字段&#xff1a;响应头字段 Set-Cookie 和请求头字段 Cookie。 Cookie 可以设置多个 key-value 对&#xff0c; 响应头中可以设置多个 Set-Cookie 字段&#xff0c;请求头Cookie后面可以设置多个键值对&#xff0c;用分号隔开&a…

使用canal和openfire实现Mysql的实时数据订阅

文章目录 1、Openfire插件接收binlog数据1.1、创建用户组1.2、接口实现 2、Canal客户端开发3、Smack消息客户端实现。 mysql的binlog的实时数据订阅 &#xff08;1&#xff09; canal安装与客户端使用 &#xff08;2&#xff09; openfire 4.7.5 Web插件开发 &#xff08;3&a…

ElementUI实现增删改功能以及表单验证

目录 前言 BookList.vue action.js 展示效果 前言 本篇还是在之前的基础上&#xff0c;继续完善功能。上一篇完成了数据表格的查询&#xff0c;这一篇完善增删改&#xff0c;以及表单验证。 BookList.vue <template><div class"books" style"pa…

分类预测 | MATLAB实现PSO-CNN粒子群算法优化卷积神经网络数据分类预测

分类预测 | MATLAB实现PSO-CNN粒子群算法优化卷积神经网络数据分类预测 目录 分类预测 | MATLAB实现PSO-CNN粒子群算法优化卷积神经网络数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现PSO-CNN多特征分类预测&#xff0c;多特征输入模型&#xf…

OpenCV 实现 SIFT→SURF 算法关键点检测实现

目录 1&#xff0c;SIFT算法原理 1.1&#xff0c;基本流程 1.1.1 尺度空间极值检测 1.1.2 关键点定位 1.1.3 关键点方向确定 1.1.4 关键点描述 1.1.5 总结 1.2 SURF原理 2 代码实现 3 结果展示 4&#xff0c;你肯定会遇到报错 cv2.error: OpenCV(3.4.8) C…

想用ChatGPT写申请文书?那你肯定会被拒!

美国总统乔拜登&#xff08;Joe Biden&#xff09;、诗人TS艾略特&#xff08;T. S. Eliot&#xff09;和历史学家斯蒂芬安布罗斯&#xff08;Stephen Ambrose&#xff09;&#xff0c;他们的名字都曾与抄袭事件联系在一起。 其中&#xff0c;艾略特的抄袭行为是在他去世后才被…

AutoCAD 产品设计:图形单位

本文讲解 AutoCAD 产品的图形单位功能产品设计&#xff0c;没有任何代码实现。 使用的 AutoCAD 为 2020 版本 图形单位是什么&#xff1f; 图形单位是用于设置 一些属性数据应该用什么格式显示 的命令&#xff0c;命令标识为 un&#xff08;units&#xff09;。 举个例子。 …

uboot启动流程-涉及s_init汇编函数

一. uboot启动涉及函数 本文简单分析uboot启动流程中&#xff0c;涉及的汇编函数&#xff1a; lowlevel_init函数调用的函数&#xff1a;s_init 函数 save_boot_params_ret函数调用的函数&#xff1a; _main 函数 本文继上一篇文章的学习&#xff0c;地址如下&#xff1a;…

“把握拐点,洞悉投资者情绪与比特币价格的未来之路!“

“本来这篇文章是昨天晚上发的&#xff0c;国庆节庆祝喝多了&#xff0c;心有余而力不足&#xff01;直接头躺马桶GG了” 标准普尔 500 指数 200 天移动平均线云是我几个月来一直分享的下行目标&#xff0c;上周正式重新测试了该目标。200 日移动平均线云表示为: 200 天指数移…

JDBC学习笔记(1)

连接数据库 下载mysql-connector-java&#xff0c;这里我是看的这个连接mysql-connector-java下载。 下载后并且导入了Idea中的lib文件下。 导入成功后&#xff0c;为了验证可以通过CTRLn来搜索Driver看看有没有添加进来。 随后在MySQL中创建一个数据库&#xff0c;我这里直…

uboot启动流程-涉及_main汇编函数

一. uboot启动流程涉及函数 本文简单分析一下 save_boot_params_ret调用的函数&#xff1a;_main汇编函数。 本文继之前文章的学习&#xff0c;地址如下&#xff1a; uboot启动流程-涉及s_init汇编函数_凌肖战的博客-CSDN博客 二. uboot启动流程涉及的 _main汇编函数 经过之…

Beats Studio Buds 连接 Windows 11 声音输出不显示设备

Beats Studio Buds 连接 Windows 11 声音输出不显示设备 Beats Studio Buds 蓝牙耳机连接Windows 11电脑后&#xff0c;无法通过耳机播放声音&#xff0c;在声音输出选项中也没有耳机选项。 问题 蓝牙耳机连接电脑。 在声音输出中查看输出设备选项。 解决方法 以管理员身…

Python中匹配模糊的字符串

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 如何使用thefuzz 库&#xff0c;它允许我们在python中进行模糊字符串匹配。 此外&#xff0c;我们将学习如何使用process 模块&#xff0c;该模块允许我们在模糊…

淘宝天猫渠道会员购是什么意思?如何开通天猫淘宝渠道会员购有什么用?

淘宝天猫渠道会员购是什么意思&#xff1f; 淘宝天猫渠道会员购与淘宝天猫粉丝福利购意思基本相同&#xff0c;都可以领取淘宝天猫大额内部隐藏优惠券、通过草柴APP开通绑定渠道会员还可以获得购物返利。 草柴APP如何绑定开通淘宝天猫渠道会员&#xff1f; 1、手机下载安装「…

【改进哈里鹰算法(NCHHO)】使用混沌和非线性控制参数来提高哈里鹰算法的优化性能,解决车联网相关的路由问题(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…