Day3-P - Matrix POJ3685
Given a N × N matrix A, whose element in the i-th row and j-th column Aij is an number that equals i2 + 100000 × i + j2 - 100000 × j + i × j, you are to find the M-th smallest element in the matrix.
Input
The first line of input is the number of test case.
For each test case there is only one line contains two integers, N(1 ≤ N ≤ 50,000) and M(1 ≤ M ≤ N × N). There is a blank line before each test case.
Output
For each test case output the answer on a single line.
Sample Input
12 1 1 2 1 2 2 2 3 2 4 3 1 3 2 3 8 3 9 5 1 5 25 5 10
Sample Output
3
-99993
3
12
100007
-199987
-99993
100019
200013
-399969
400031
-99939 思路:观察列递增,行递减,枚举列进行二分算出第M大,然后二分枚举X是第几大,二分套二分,代码如下:
typedef long long LL; const LL INF = 0x3f3f3f3f3f3f3; LL N, M; LL calculate(LL i, LL j) {
return i * i + * i + j * j - * j + i * j;
} LL check(LL num) {
LL sum = , l, r, mid;
for (int i = ; i <= N; ++i) {
l = , r = N;
while(l <= r) {
mid = (r + l) >> ;
if(calculate(mid,i) > num) {
r = mid - ;
}
else
l = mid + ;
}
sum += r;
}
return sum;
} int main() {
LL T;
scanf("%I64d", &T);
while(T--) {
scanf("%I64d%I64d", &N, &M);
LL l = -INF, r = INF, mid;
while(l <= r) {
mid = (r + l) >> ;
if(check(mid) < M) {
l = mid + ;
}
else
r = mid - ;
}
printf("%I64d\n", l);
}
return ;
}
小结:如何寻找二分的答案,如果mid是所求答案,那么check(mid)为true,更新r的值为mid-1,之后的check都是false,从而更新l,最后l变为mid,输出mid。
比如>=的情况就是true的情况,所以一般答案都是非>=的那一侧。
补:
在二分时,注意满足的条件是满足题意还是不满足题意,New如下:(一般来说ans都在等于的那一侧,但是哪一侧是l哪一侧是r需要判断
typedef long long LL; LL N, M, mid, ans; LL calculate(LL i, LL j) {
return i * i + * i + j * j - * j + i * j;
} LL check(LL x) {
LL l, r, mid, sum = , ans;
for(int i = ; i <= N; ++i) {
l = , r = N, ans = ;
while(l <= r) {
mid = (r + l) >> ;
if(calculate(mid, i) <= x) {
ans = mid;
l = mid + ;
} else {
r = mid - ;
} }
sum += ans;
}
return sum;
} const LL INF = 0x3f3f3f3f3f3f3;
int main() {
int T;
scanf("%d", &T);
while(T--) {
scanf("%I64d%I64d", &N, &M);
//LL l = calculate(1, N), r = calculate(N, 1);
LL l = -INF, r = INF;
while(l <= r) {
mid = (r + l) >> ;
if(check(mid) < M) {
l = mid + ;
} else {
ans = mid;
r = mid - ;
}
}
printf("%I64d\n", ans);
}
return ;
}
Day3-P - Matrix POJ3685的更多相关文章
- 冬令营DAY3 T1 Matrix
题目描述 Description 生活中,我们常常用 233 表示情感.实际上,我们也会说 2333,23333,等等. 于是问题来了: 定义一种矩阵,称为 233 矩阵.矩阵的第一行依次是 2 ...
- Matrix [POJ3685] [二分套二分]
Description 有一个N阶方阵 第i行,j列的值Aij =i2 + 100000 × i + j2 - 100000 × j + i × j,需要找出这个方阵的第M小值. Input 第一行输 ...
- POJ3685 Matrix —— 二分
题目链接:http://poj.org/problem?id=3685 Matrix Time Limit: 6000MS Memory Limit: 65536K Total Submissio ...
- POJ3685 Matrix(嵌套二分)
同行元素递减,同列元素递增,采用嵌套二分的方法 #include<cstdio> #include<iostream> #include<cstdlib> #inc ...
- poj3685 Matrix
思路: 二分套二分. 矩阵在每一列上是严格递增的,可以利用这一点进行二分. 实现: #include <cstdio> #include <cmath> #include &l ...
- 2019暑期金华集训 Day3 图论
自闭集训 Day3 图论 NOI2019 D2T1 没有真正建出图来的必要,可以直接打取\(\min\)的\(tag\). 也可以把边压进堆里,然后变成一个二维清点问题(???),然后就线段树+并查集 ...
- 【POJ - 3685】Matrix(二分)
Matrix Descriptions 有一个N阶方阵 第i行,j列的值Aij =i2 + 100000 × i + j2 - 100000 × j + i × j,需要找出这个方阵的第M小值. In ...
- angular2系列教程(十一)路由嵌套、路由生命周期、matrix URL notation
今天我们要讲的是ng2的路由的第二部分,包括路由嵌套.路由生命周期等知识点. 例子 例子仍然是上节课的例子:
- Pramp mock interview (4th practice): Matrix Spiral Print
March 16, 2016 Problem statement:Given a 2D array (matrix) named M, print all items of M in a spiral ...
随机推荐
- Golang 函数以及函数和方法的区别
在接触到go之前,我认为函数和方法只是同一个东西的两个名字而已(在我熟悉的c/c++,python,java中没有明显的区别),但是在golang中者完全是两个不同的东西.官方的解释是,方法是包含了接 ...
- Vue 项目中使用less
首先 你得有 完整的 Vue开发环境第一步 安装less 依赖 npm install less less-loader --save 第二步 修改webpack.config.js文件,配置load ...
- Java判断对象是否为Null/空
package com.taiping.test; import java.lang.reflect.Field; import java.lang.reflect.Type; /** * <p ...
- 虚拟交换系统-VSS
1.虚拟交换系统VSS技术概述 VSS的特点: VSS将两台Catalyst 6500/4500系列交换机组合为单一虚拟交换机,对外来看,只有一台交换机,管理冗余链路如同管理自己的一个单一接口. VS ...
- 前缀和-Big Water Problem (牛客)
链接:https://ac.nowcoder.com/acm/problem/15164 题目描述 给一个数列,会有多次询问,对于每一次询问,会有两种操作: 1:给定两个整数x, y, 然后在原数组的 ...
- js 子窗口调用父框框方法
父窗口 子窗口
- python浅谈编程规范和软件开发目录规范的重要性
前言 我们这些初学者,目前要做的就是遵守代码规范,这是最基本的,而且每个团队的规范可能还不一样,以后工作了,尽可能和团队保持一致,目前初学者就按照官方的要求即可 新人进入一个企业,不会接触到核心的架构 ...
- 解决方法:Could not load file or assembly 'WebGrease, Version=1.5.1.25624, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies.
最近使用VS2015调试ASP.NET 程序遇到了该问题: 在网上找了很多方法都不能解决,最后自己解决了,方法如下: 在project -> NuGet管理中找到已安装的所有程序:将Web Op ...
- 「JSOI2011」任务调度
「JSOI2011」任务调度 传送门 一开始还在想写平衡树,看到 \(\text{TRANS}\) 操作后就晓得要用可并堆了. 这题好像就是个可并堆的板子题??? ADD 直接往对应的对里面加元素 D ...
- Python 正则表达式之 sub 和 subn函数的使用
re.sub() 函数的功能 re是reguler expressioin的缩写,表示正则表达式 sub 是 substitute 的缩写,表示替换: re.sub是个正则表达式方面的函数,用来实现通 ...