首页 > 其他分享 >代码源:合并数列(二分)

代码源:合并数列(二分)

时间:2023-09-20 15:57:06浏览次数:24  
标签:二分 return 数列 int res 代码 long ll

有 n
个线性序列,第 i
个序列可以表示成 ki×x+bi
的形式 (x=0,1,2,...
)。

请问将这些序列中的数按从小到大的顺序合并起来,前 m
个数分别是多少(重复出现的数合并后也会出现多次)?

输入格式
第一行一个整数 n

接下来 n
行每行两个整数 ki,bi

最后一行一个整数 m

输出格式
输出和。

样例输入
2
1 2
5 2
8
样例输出
36

点击查看代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+10;
int k[N],b[N],n,m;
ll calc(int x)
{
	long long res=0;
	for(int i=1;i<=n;++i)
	{
		if(x>=b[i]) res+=(x-b[i])/k[i]+1;
	}
	return res;
}
ll sum(int x)
{
	long long res=0;
	for(int i=1;i<=n;++i)
	{
		if(x>=b[i]) 
		{
		  int t=(x-b[i])/k[i]+1;
		  res+=(ll)(b[i]+k[i]*(t-1)+b[i])*t/2;	
		}
	}
	return res;
}
void solve()
{
    cin>>n;
    for(int i=1;i<=n;++i) cin>>k[i]>>b[i];
    cin>>m;
    int L=1,R=1e9;
    //二分目的找到一个分界线,使得小于等于分界线左边的数有<=m个,而右边的数>m个
    while(L+1<R)
    {
    	int M=(L+R)>>1;
    	if(calc(M)<=m) L=M;
    	else R=M;
    }
    cout<<sum(L)+((ll)m-calc(L))*(L+1)<<'\n';
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    int T=1;
    //cin>>T;
    while(T--)
    {
        solve();
    }
    return 0;
}

标签:二分,return,数列,int,res,代码,long,ll
From: https://www.cnblogs.com/ruoye123456/p/17717515.html

相关文章

  • 编译.NET 7.0 Runtime源代码
    1.从github拉取代码,路径: https://github.com/dotnet/runtimehttps://github.com/dotnet/runtime.git 2.切换分支到"release/7.0"release/7.03.编译源代码需要另外安装:python、cmake,按照最新版本安装即可,确保它们都已经添加到系统环境变量中去了。4.安装Visua......
  • UNU 个人项目代码分析
    一、前言本文是对于结对编程队友的个人项目的分析,由于工程量较大,完成分析花了一定的时间。不过有一说一,队友的这项工程完成度是相当高的,质量也是很靠谱。本人在分析队友的工程的同时也是在学习的过程,队友的程序语言采用的是C++,区别于java和python等其他很多同学采用的语言,在队友......
  • 代码重构原则与技巧
    代码可读性是衡量代码质量的重要标准,可读性也是可维护性、可扩展性的保证,因为代码是连接程序员和机器的中间桥梁,要对双边友好。随着项目在不断演进过程中,代码不停地在堆砌,如果没有人为代码的质量负责,代码总是会往越来越混乱的方向演进。当混乱到一定程度之后,量变引起质变,项目的维......
  • 四千行代码写的桌面操作系统GrapeOS完整代码开源了
    https://www.cnblogs.com/chengyujia/p/17715204.html 简介学习操作系统原理最好的方法是自己写一个简单的操作系统。GrapeOS是一个非常简单的x86多任务桌面操作系统,源代码只有四千行,非常适合用来学习操作系统原理。源码地址:https://gitee.com/jackchengyujia/grapeos视频教程......
  • [代码随想录]Day49-动态规划part17
    题目:647.回文子串思路:整体上是两种,就是s[i]与s[j]相等,s[i]与s[j]不相等这两种。当s[i]与s[j]不相等,那没啥好说的了,dp[i][j]一定是false。当s[i]与s[j]相等时,这就复杂一些了,有如下三种情况情况一:下标i与j相同,同一个字符例如a,当然是回文子串情况二:下标i与j相差为1,例如aa......
  • java代码访问网页
    importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.net.URL;importjava.net.HttpURLConnection;publicclassWebPageAccess{publicstaticvoidmain(String[]args){Stringurl="http://example.com";//输入要访......
  • 【HNU软件设计与实现】个人项目代码分析
    引言项目背景和目的:本项目为软件设计与实现课程的个人编程项目。在课程设置方面,这个项目旨在提高我们独立编程、规范编码的能力。个人项目:中小学数学卷子自动生成程序用户:小学、初中和高中数学老师。功能:1、命令行输入用户名和密码,两者之间用空格隔开(程序预设小学、初中和高......
  • 2023年研究生数学建模竞赛思路及代码预定
    第二十届“华为杯”中国研究生数学建模竞赛报名时间:9月17日17:00前完成报名竞赛时间:2023年9月22日8:00至2023年9月26日12:00(参考往年)报名费:每队300元报名网址:https://cpipc.acge.org.cn/   建议尽快抽出一两个小时整合一下常用的网站、工具资料等,尽快熟悉一些上手比较快的软......
  • 用于异构无线传感器网络的多聚合器多链路由协议(Matlab代码实现)
     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • java在try-catch-finally代码块中return或者throw Exception时需注意的问题
    在Java的try-catch-finally代码块中使用return或者throwException时,需要注意以下几个问题:1.Return语句的执行:当在try或catch中使用return语句时,程序会立即退出当前方法并返回指定的值。但是在执行return之前,finally代码块将被执行。如果finally中也包含retur......