WHY吃糖果 QDUOJ 二分嵌套

原题链接

解题思路参考链接

题意

给出一个\(n*n\)的矩阵,每个格子的权值为\(i*i+j*j+i*j+100000*(i-j)\),求该矩阵中第m小的权值为多少

解题思路

当列数固定时,这个函数是随着行数的增加而增加的(二次函数简单判断下就行),于是外层的二分进行二分答案,里面的二分进行判断小于等于当前答案的格子有多少个。这样就可以解决问题。参考大佬的思路,可以点击查看。

代码实现

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const ll inf=0x3f3f3f3f3f3f3f3f;
ll n, m; ll mul(ll i, ll j)
{
return i*i+j*j+i*j+100000*(i-j);
} ll judge(ll x)
{
ll ret=0;
for(ll j=1; j<=n; j++)
{
ll l=1, r=n, mid, tmp=0;
while(l<=r)
{
mid=(l+r)>>1; //这是行数
if(mul(mid, j) <= x)
{
tmp=mid;//在列数一定时,有多少个格子满足要求
l=mid+1;
}
else
r=mid-1;
}
ret+=tmp;//这里是所有的格子里面满足要求的格子数
}
return ret;
} int main()
{
int t;
scanf("%d", &t);
while(t--)
{
ll L=-inf, R=inf, ans, mid;
cin>>n>>m;
while(L<=R)
{
mid=(L+R)>>1;
if(judge(mid) < m) //这里需要注意一下,没有等号
{
L=mid+1;
}
else
{
ans=mid;
R=mid-1;
} }
printf("%lld\n", ans);
}
return 0;
}

最新文章

  1. 从刚刚「简书」平台的短暂异常,谈Nginx An error occurred报错~
  2. Position a child div relative to parent container in CSS: [设置 子DIV位置 跟 父DIV相关联]
  3. Java学习-004-传世经典Helloworld
  4. [老老实实学WCF] 第一篇 Hello WCF
  5. PHP+Mysql无限分类的方法汇总
  6. 【pano2vr】网页Flash中简单实现炫酷的3D模型制作
  7. gnome设置dvorak键盘布局
  8. Modem常用概念
  9. 关于Eclipse无法生成class文件的问题
  10. C - BLG POJ - 1417 种类并查集加dp(背包)
  11. 【转载】ASP.NET生成图片的缩略图
  12. mysql修改默认端口号后从windows命令行登录
  13. 每位 Ubuntu 18.04 用户都应该知道的快捷键 | Linux 中国
  14. git 修改默认编辑器
  15. MapReduce开发程序,运行环境配置
  16. 【转 记录】python中的encode以及decode
  17. Hadoop Hive sql 语法详解
  18. vue-router 懒加载优化
  19. apple 下安装mysql 以及 碰到的问题
  20. Ubuntu16.04系统中不同版本Python之间的转换

热门文章

  1. 洛谷 P1140 相似基因 ( 线性DP || 类LCS )
  2. 2019hdu多校 Fansblog
  3. CSS实现二维码扫描的效果
  4. Atom 输入时按 Tab 快捷键提示怎么取消?
  5. Spring Boot教程(十七)属性配置文件详解(2)
  6. 【转】BYV--有向图强连通分量的Tarjan算法
  7. java web程序上传文件,浏览器显示连接被重置
  8. jq完成省市区街道四级联动
  9. Vue.use源码分析(转)+如何封装一个组件
  10. 大哥带的mssql注入拿shell