当前位置: 首页 > news >正文

C. Maximum GCD on Whiteboard

。。。长时间不做题真的会变笨

C. Maximum GCD on Whiteboardhttps://codeforces.com/contest/2156/problem/C

题目大意:

给你n个数,让你求得这n个数的最大公约数,但是你可以通过对这n个数进行一些操作来变大这n个数原来的最大公约数,操作一:删除某一个数,但只能删k次;操作二:将一个数拆成三个数,x1,x2,x3,但是得保证1<=x1<=x2<=x3,且拆完之后只保留x1,x3。

题目思路:

贪心的想删除会占用k的次数,所以优先拆数,实在拆不了了再删数;

那么我们开始考虑拆数这个操作

首先我们需要枚举每个公约数,假设当前枚举到的公约数是g,那个这n个数中只要>4*g的数都可以通过拆数这个操作使得这个数所拆得的两个数都能被g整除

我们接下来来证明一下

首先x1就固定拆成g,此时x2+x3>=2g,为了方便理解我们可以写成,x2+x3>=m*g+p(m是>=2的整数,p可以为0,且p一定小于g),此时我们就可以把,x3拆分成(m-1)*g,x2拆分成g+p,这样就可以保证“这n个数中只要>4*g的数都可以通过拆数这个操作使得这个数所拆得的两个数都能被g整除”

证明结束

代码

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 2e5 + 5;
void solve() {int n,k;cin >> n >> k;vector<int>a(n+1),s(n+1);for (int i = 1; i <= n; i++) {int t;cin >> t;a[t]++;}for (int i = 1; i <= n; i++) {s[i] = s[i - 1] + a[i];}int ans=0;for (int i = 1; i <= n; i++) {int cnt=0;if (4*i<=n)cnt+=n-s[4*i-1];if(i<=n)cnt+=a[i];if (2*i<=n)cnt+=a[2*i];if (3*i<=n)cnt+=a[3*i];if (n-cnt<=k)ans=i;}cout << ans << endl;
}
signed main() {int q=1;cin >> q;while (q--) {solve();}
}

http://www.dtcms.com/a/528646.html

相关文章:

  • 【AI论文】DITING:网络小说翻译评估的多智能体基准测试框架
  • 吉林省软环境建设网站免费开网站系统
  • vulnerable_docker_containement 靶机
  • Docker方式安装Nginx
  • 标签噪声学习:理论与方法详解
  • Docker 部署 Debian 全流程教程
  • 上海做网站公司wordpress 活动网站
  • Bee:从 0 到 1 打造一套现代化的全栈后台管理系统(React + Spring Boot)
  • 计算机操作系统:“抖动”与工作集
  • 数据结构(长期更新)第4讲:单链表
  • C#测试调用OpenXml填充word文档的表格
  • 基于python的网站开发项目做外汇网站代理商
  • 对TCP/IP协议的理解
  • 如何判断“IP+端口“通不通
  • tensorrt c++部署
  • TypeScript 基础类型与接口详解
  • MySQL————mysql connect
  • 能打开各种网站的搜索引擎原神网页设计作业
  • 【SpringCloud】Ribbon(LoadBalancer ) 和 Feign
  • Dockerfile 中 ENTRYPOINT 和 CMD 有什么区别 ?
  • 网站数据库模版深圳网站建设黄浦网络 骗钱
  • vs code 下docker使用方法,以php 项目为示例
  • 番禺网站建设哪里好深圳十大传媒公司
  • 前端常见的设计模式
  • 亚马逊云渠道商:如何通过配置自动替换构建故障自愈的云架构?
  • 豆包 Python 和 Java 的 AI 集成及模型转换
  • 深入解析C++命令模式:设计原理与实际应用
  • 商城网站建设目标上海前十名文化传媒公司
  • ExpressionVisitor 的使用场景及方法
  • 《3D端游开放世界动态天气系统与场景交互优化实践日志》