[分块][数学][瞎搞]Codeforces Round #424 .C Bamboo Partition

CF830C Bamboo Partition 整除分块 整除分块 阅读详情

刚开始的做法是对的…然而越做头越昏,竟然用错误的例子把自己叉掉…
还好最后半个小时清醒了

先列出式子

要求最大的d满足

∑i=1nd−((ai−1)%d+1)≤k

其中ai要先减一再取模是为了防止ai是d的倍数的情况,

再推一推

n×d−∑i=1nai−⌊ai−1d⌋×d≤k

n×d+d∑i=1n⌊ai−1d⌋≤k+∑i=1nai

大概就是这样
然后发现,⌊ai−1d⌋总共有O(a√i)种取值
那么所有⌊ai−1d⌋的取值就是O(nm−−√),其中m是ai的最大值
然后从大到小枚举每一种取值,显然答案在是第一种满足条件的取值。
然后把这个取值转化成最大的d就可以了,具体看代码
这样复杂度是O(n2m−−√),看起来很大的样子…跑得过就行

#include <cstdio>
#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
#include <set>
#include <cmath>
#define fi first
#define se second
#define pb push_back

using namespace std;

typedef long long ll;
typedef pair<int,int> par;

inline char nc(){
    static char buf[100000],*p1=buf,*p2=buf;
    return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
}

inline void rea(int &x){
    char c=nc(); x=0; int f=1;
    for(;c>'9'||c<'0';c=nc())if(c=='-') f=-1;
    for(;c>='0'&&c<='9';x=x*10+c-'0',c=nc()); x*=f;
}

inline void rea(ll &x){
    char c=nc(); x=0; int f=1;
    for(;c>'9'||c<'0';c=nc())if(c=='-') f=-1;
    for(;c>='0'&&c<='9';x=x*10+c-'0',c=nc()); x*=f;
}


const int N=110;

int n,a[N];
vector<int> v;
ll goal,k;

int main(){
    rea(n); rea(k);
    for(int i=1;i<=n;i++)
        rea(a[i]),goal+=a[i],a[i]--;
    goal+=k;
    for(int i=1;i<=n;i++)
        for(int j=1,d;j<=a[i];j=d+1)
            d=a[i]/(a[i]/j),v.pb(j);
    for(int i=1;i<=n;i++) v.pb(a[i]+1);
    sort(v.begin(),v.end()); 
    //for(int i=0;i<v.size();i++) printf("%d ",v[i]); putchar('\n');
    v.resize(unique(v.begin(),v.end())-v.begin());
    //for(int i=0;i<v.size();i++) printf("%d ",v[i]); putchar('\n');
    int td,last=1<<30;
    for(int s=v.size()-1;~s;s--){
        int d=v[s]; ll cur=0;
        for(int i=1;i<=n;i++){
            cur+=d*(a[i]/d);
        }
        if(1LL*n*d+cur<=goal){
            td=d; break;
        }
        last=d;
    }
    ll cur=0;
    for(int i=1;i<=n;i++) cur+=(a[i]/td);
    printf("%lld\n",goal/(n+cur));
    return 0;
}
uniapp - 最新详细实现web-view网页与安卓苹果App端之间互相通信功能,苹果app/安卓app平台与内嵌webview组件内的网页进行相互传值,内置网页与app双向实时通信,详细示例代码 uni-app,Android安卓,苹果ios,app,内嵌webview,第三方H5网页,app和web-view通信传值,web-view引入的页面向App主应用传递数据,App端与webview端相互通信,App端和H5端webview之间的通信,uniapp实现webview和APP之间的传值通信,如何互相传递对象数据,数据传递了接收不到,web-view页面向app内发送消息,监听传递的参数,uni-app和web-view页面相互传参,报错怎么办,跨域,屏幕空白出错,数据交互,解决手机物理返回按 阅读详情

相关推荐

SQLSTATE58030

在优化一条SQL的时候遇到了执行错误 gtlions =# select t1.telnumber,t2.ua,t2.url,t1.apply_name,t2.apply_name from tb1 t1 gtlions -# left outer join tb2 t2 on t1.sid = t2.ipsid gtlions-# where t1.sum_date=20141128 a

Gtlions Tracker 3659

Codeforces 1619H 分块

若排列保持不变,可以预处理后倍增求解,但对于会改变排列的操作 1,则难以胜任。考虑分块,对每个位置。同理),那么只需要重新计算这些位置的。单次操作 2 查询复杂度。,单次操作 1 复杂度。

neweryyy的博客 284

数字电子时钟——数字电路课设

本文设计了一种基于中小规模集成电路的数字电子时钟系统,采用模块化设计方法,包含晶振电路(CD4060+D触发器)、计时电路(74HC161计数器)、数码管驱动(CD4511)和整点报时功能。系统实现了60进制秒/分、24进制小时、7进制星期的计时显示,支持手动校时功能,并具备整点报时特性(59分54-58秒5次500Hz低音,59秒1次1000Hz高音)。通过分模块调试与整合,最终实物电路满足设计要求,获得优秀评价。

来自FZU——电子科学与技术专业 1488

CodeForces - 551E(分块)

题意: 给定一个长度为N的序列。 有2个操作:1.序列第l项到第r项加v(区间加),2 .求整个序列中值为v的数的位置的差值最大是多少。不存在输出-1。 思路: 对n分块,用一个vector维护每一块排序后的序列,然后二分答案。分块时对每一块的vector赋值,这里因为最后要输出下标的差值,所以用一个结构体储存数据和下标,然后排序。更新时和一般分块操作差不多,只不过这里为了节约时间用了laz...

swineherd的博客 403

ubuntu20.04安装UE4+Airsim环境

版本UE4.27+Airsim1.81

玖茸的博客 3380

Unity URP半透明物体渲染避坑指南:双面渲染与深度写入的实战技巧

本文深入探讨了Unity URP中半透明物体自交叠渲染问题的核心根源与解决方案。针对模型自身交叠导致的排序错误,文章提供了双面渲染与深度写入两种实战技巧,详细分析了其实现原理、性能开销及适用场景,帮助开发者根据项目需求选择最优方案,有效提升玻璃、水体等材质的视觉表现。

sunny的博客 545

CodeForces 785E Anton and Permutation (分块)

题意:初始是一个1-n的长度为n的有序数组,现在q次询问,每次询问交换a[l], a[r] 并且输出交换后整个数组有多少对逆序对(每次循环具有后效性)。1 ≤ n ≤ 200 000, 1 ≤ q ≤ 50 000 思路:第一个分块题,看到一篇讲的非常好的博客(戳这里),我写的话肯定没他写的好,,, 粘下他的思路吧: 当交换a[l]和a[r]时。讨论区间为(l,r),那么

CillyB的博客 709

无人机:DJI Matrice 200 Series_(13).行业应用案例分析

在前一节中,我们介绍了DJI Matrice 200系列无人机的基本硬件配置和性能参数。本节将通过具体的行业应用案例,分析如何利用DJI Matrice 200系列无人机进行二次开发,以满足不同行业的需求。

zhubeibei168的博客 1448

CodeForces - 13E (分块)

题意: 有n个弹簧,每次扔个球,这个球可以弹到i+power[i]的位置 然后有两种操作 将第i个位置的弹簧的弹力改为b 将球扔到第i个位置,问这个球最后弹到了哪儿,这个球弹了几次? 思路: 对n分块,用cnt数组保存每一个点跳到别的块的次数,to数组保存每个点能直接或间接跳到的别的块的下标。容易得出cnt数组和to数组要倒退才行,因为现状态的结果由后面的状态决定。更新的时候只用更新这一块中...

swineherd的博客 350

模拟电路综合笔试题解析

本专栏预计更新60期,当前为第10期,文章约6000字,旨在帮助读者掌握模拟电路笔试的核心知识点与实战技巧。文章分为五个章节,涵盖基础理论、高频考点、大厂题目解析等内容。首先,文章详细解析了DC-DC与LDO的区别及选型依据,并通过真题分析帮助读者理解其应用场景。接着,文章深入探讨了运放电路设计、同步降压电路设计等高频考点,并结合实际案例提供解决方案。此外,文章还分享了特斯拉、华为、大疆等大厂的面试题及解析,帮助读者应对复杂电路设计挑战。最后,文章总结了模拟电路设计中的关键技巧与优化方法,为读者提供全面的笔

启芯硬件的博客 469

关于红队方面的学习资料

关于红队方面的学习资料

Sumarua的博客 1084

Codeforces13 E. Holes(分块)

题意: 给定长度为n的序列a,a(i)表示将石子丢到i,会从i位置会跳到i+a(i),一直重复直到跳出n m次操作,操作有两种: 1.将a[x]修改为y 2.询问将式子丢到x,最后一步从哪个位置跳出n,以及总共跳了多少步 数据范围:n,m<=1e5 解法: 分块 对于每个块,预处理: cnt[i]表示从i跳出当前块需要的次数 nt[i]表示从i跳出当前块之后到达的位置 last[i]变送从i跳出当前块最后一步的位置 对于修改操作,重新处理a[x]所在块,复杂度O(sq) 对于查询操作,是按块跳的,

zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz 247

32、AI责任认定:法律与社会视角的探讨

本文探讨了人工智能(AI)在法律与社会视角下的责任认定问题。从疏忽与责任标准、严格责任制度的适用性,到AI是否能够承担法律责任等角度展开分析,指出随着AI技术的发展,传统的责任概念需要重新审视。文章进一步将AI与法人进行类比,提出AI作为物理-社会系统的责任认定框架,并强调需要建立适应AI特点的法律体系以实现公平与安全的平衡。

star5的专栏 200

Codeforces Round 919 (Div. 2) D. Array Repetition(分块,1900)

当k的取值范围达到1e18时,由于每次2操作至少会复制数组,可以发现很快就会出现无效操作。因此,针对每个查询,我们可以枚举可能的2操作。:第 i 块结束时(遇到 type 2)要把「之前的所有内容+本块 app[i]」复制的倍数。理解了这个分块步骤,查询就很好处理了,我们从后往前枚举可能的2操作,然后缩短当前k值的范围,:在第 i 块开始前,已有内容(不算本块的 app[i] 和 mul[i])的长度。:第 i 块里遇到的所有 type 1 收集的元素。代码实现借鉴了jls的代码,非常优美。

2201_75461013的博客 399

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Codeforces1207 F. Remainder Problem(分块)

传送门 题意: 给出一个长度为 nnn 的数组,初始值全为000,有 qqq 次操作,分为两种: 1.1.1. 给 axa_xax​ 加 yyy 2.2.2. 查询所有下标满足i%x=yi\%x=yi%x=y 的位置的元素和。 题解: 考虑分块,将数组分为 n\sqrt nn​ 块。 对于查询操作,如果模数 x>nx > \sqrt nx>n​​ ,那么就暴力统计答案,因为这样最多只会遍历 n\sqrt nn​ 个块。 如果模数 x≤nx \leq \sqrt nx≤n​ ,那么可以设一个

the best 的博客 368

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

[codeforces830C]Bamboo Partition

time limit per test : 2 seconds memory limit per test : 512 megabytes 分数:2500 Vladimir wants to modernize partitions in his office. To make the office more comfortable he decided to remove a partition...

dxyinme-Zz 414

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

[Codeforces13E]Holes(分块)

题目描述传送门题解其实就是弹飞绵羊那道题。。。 分块之后对每一个元素,维护:几次跳到当前块之外,跳的时候在本块内的最后一个点,跳到当前块之外的点 预处理只需要扫一遍 修改的时候重构块 查询的时候一次蹦至少一个块,只需要顺着往下蹦就行了 时间复杂度O(nn√)O(n\sqrt n)代码#include<algorithm> #include<iostream> #include<cstrin

zyf2000 668

codeforces 830C Bamboo Partition

题目链接codeforces 830C Bamboo Partition分析首先我们需要知道什么样的d是满足的.对于任意的 ii ∑[a[i]+d−1d]−a[i]≤k \sum [\frac{a[i]+d-1}{d}] - a[i] \le k 因此 d≤k+∑a[i] d \le k+\sum a[i] 注意条件项中的 [a[i]+d−1d][\frac{a[i]+d-1}{d}] 在这中

taotao 的大学墓志 1393

【CF830C】Bamboo Partition 分块

【CF830C】Bamboo Partition 题解:给你n个数a1,a2...an和k,求最大的d使得$\sum\limits_{i=1}^n((d-a[i] \% d) \% d) \le k$ n<=100,a[i]<=10^9,k<=10^11 题解:$\sum\limits_{i=1}^n((d-a[i] \% d) \% d)=d\sum\limit...

aodanchui1057的博客 267

CodeForces - 13E(分块)

Little Petya likes to play a lot. Most of all he likes to play a game «Holes». This is a game for one person with following rules: There are N holes located in a single row and numbered from left t...

weixin_30484739的博客 218

【数学分析+除法分块】Codeforces830C[Bamboo Partition]题解

题目概述有 nn 个竹子,每个竹子刚开始高度为 00 ,每过一天会长高 11 ,现在每过 dd 天来检查一次,如果 ii 竹子的高度 ≥ai\ge a_i 则将该竹子高度砍为 aia_i 且该竹子不再生长,求砍掉高度不超过 kk 时 dd 最大为多少。解题报告除法分块性质: ⌊ni⌋\lfloor \frac{n}{i}\rfloor 排序去重之后是 O(n√)O(\sqrt{n}) 的。简单说明:

ZigZagK的博客 847

Codeforces 830C Bamboo Partition (看题解)

Bamboo Partition 列公式, 整除分块, 想不到, 好菜啊。 #include<bits/stdc++.h> #define LL long long #define fi first #define se second #define mk make_pair #define PLL pair<LL, LL> #define P...

202

CF830C:Bamboo Partition(数学)

C. Bamboo Partition time limit per test 2 seconds memory limit per test 512 megabytes input standard input output standard output Vladimir wants to modernize partitions

junior19的博客 564

[除法分块] Codeforces 830C Bamboo Partition

#include<cstdio> #include<algorithm> using namespace std; const int maxn=100005; typedef long long LL; int n,a[maxn]; LL K,sum_a,now,_max,ans; int main(){ // freopen("cf830C.in","r",stdin); // freope

Lynstery's blog 642

Codeforces Round #424 (Div. 1, rated, based on VK Cup Finals) C. Bamboo Partition(数学)

题目链接:http://codeforces.com/contest/830/problem/C 公式可以整理成 代码: #include using namespace std; const int MAXN=105; typedef long long ll; int a[MAXN]; ll lim=0; int main() { //freopen("in.t

bibibibi的博客 682

构造法——Diverse Permutation ( CodeForces 482A )

题目链接: http://codeforces.com/problemset/problem/482/A 分析: 这是一道构造法构造数学模型的题,建议先列出一定数量数据,然后从中寻找规律,建立模型。 题解: 如果数组长度为n,间隔数为k的话,我们可以假设k=n-1,然后列出n=4, n=5, n=6, n=7时候的数组的取值。取值的时候可以用这种方法:每次设第k个位置为1,那么它与之后元素的差

FeBr2的博客 589
上一篇: [模拟][线段树]Codeforces Round #424. B Cards Sorting
下一篇: [DP][打表] Codeforces Round #424 .D Singer House
LowestJN
博客等级 码龄10年 76粉丝 422原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值