zoj3955:Saddle Point(想法题)
传送门
题意
给出n*m的矩阵,询问所有子矩阵中鞍点的个数
鞍点定义:在行唯一最小,在列唯一最大
分析
我们遍历每个点,计算该点对于答案的贡献即可。
每个点的贡献为\((2^{numa[i][j]})*(2^{numb[i][j]})\)
numa[i][j]记录第i行大于该点的数个数
numb[i][j]记录第j列小于该点的数个数
trick
代码
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const long long mod = 1e9+7;
int mp[1010][1010];
long long ans;
int numa[1010][1010],numb[1010][1010];
int t,n,m,a[1010];
long long quick_mod(int a,int p)
{
long long ret=a,ans=1;
if(p<0) return 1;
for(;p;p>>=1,(ret*=ret)%=mod) if(p&1) (ans*=ret)%=mod;
return ans;
}
int main()
{
for(scanf("%d",&t);t--;)
{
scanf("%d %d",&n,&m);
for(int i=1;i<=n;++i)for(int j=1;j<=m;++j) scanf("%d",&mp[i][j]);
memset(numa,0,sizeof(numa));
memset(numb,0,sizeof(numb));
for(int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j) a[j]=mp[i][j];
sort(a+1,a+1+m);
for(int j=1;j<=m;++j) numa[i][j]=m-(upper_bound(a+1,a+1+m,mp[i][j])-a-1);
}
// for(int i=1;i<=n;++i)for(int j=1;j<=m;++j) printf("%d%c",numa[i][j],j==m?'\n':' ');
for(int j=1;j<=m;++j)
{
for(int i=1;i<=n;++i) a[i]=mp[i][j];
sort(a+1,a+1+n);
for(int i=1;i<=n;++i) numb[i][j]=(lower_bound(a+1,a+1+n,mp[i][j])-a-1);
}
// for(int i=1;i<=n;++i)for(int j=1;j<=m;++j) printf("%d%c",numb[i][j],j==m?'\n':' ');
ans=0;
for(int i=1;i<=n;++i)for(int j=1;j<=m;++j) (ans+=quick_mod(2,numa[i][j])*quick_mod(2,numb[i][j]))%=mod;
printf("%lld\n",ans);
}
}
zoj3955:Saddle Point(想法题)的更多相关文章
- HDU 4972 Bisharp and Charizard 想法题
Bisharp and Charizard Time Limit: 1 Sec Memory Limit: 256 MB Description Dragon is watching NBA. He ...
- CodeForces 111B - Petya and Divisors 统计..想法题
找每个数的约数(暴力就够了...1~x^0.5)....看这约数的倍数最后是哪个数...若距离大于了y..统计++...然后将这个约数的最后倍数赋值为当前位置...好叼的想法题.... Program ...
- HDU - 5806 NanoApe Loves Sequence Ⅱ 想法题
http://acm.hdu.edu.cn/showproblem.php?pid=5806 题意:给你一个n元素序列,求第k大的数大于等于m的子序列的个数. 题解:题目要求很奇怪,很多头绪但写不出, ...
- HDU - 5969 最大的位或 想法题
http://acm.hdu.edu.cn/showproblem.php?pid=5969 (合肥)区域赛签到题...orz 题意:给你l,r,求x|y的max,x,y满足l<=x<=y ...
- HDU 4193 Non-negative Partial Sums(想法题,单调队列)
HDU 4193 题意:给n个数字组成的序列(n <= 10^6).求该序列的循环同构序列中,有多少个序列的随意前i项和均大于或等于0. 思路: 这题看到数据规模认为仅仅能用最多O(nlogn) ...
- CodeForces - 156B Suspects 逻辑 线性 想法 题
题意:有1~N,n(1e5)个嫌疑人,有m个人说真话,每个人的陈述都形如X是凶手,或X不是凶手.现在给出n,m及n个陈述(以+x/-X表示)要求输出每个人说的话是true ,false or notd ...
- 2016华中农业大学预赛 E 想法题
Problem E: Balance Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 205 Solved: 64[Submit][Status][We ...
- codeforces 657C - Bear and Contribution [想法题]
题目链接: http://codeforces.com/problemset/problem/657/C ----------------------------------------------- ...
- POJ 1066 Treasure Hunt [想法题]
题目链接: http://poj.org/problem?id=1066 --------------------------------------------------------------- ...
随机推荐
- CSY版最大团,速度快一倍
#include <bits/stdc++.h> using namespace std; #define REP(i, n) for(int i(0); i < (n); ++i) ...
- sql 语句哪里添加单引号问题
1.sql 语句哪里添加单引号问题,哪些地方必须加双引号,否则sql语句会报错? :涉及varchar的值的时候,必须有单引号包括varchar值.int等其他字段类型,则不需要加单引号包括. 如: ...
- weblogic线程阻塞性能调优(图解)
转自:http://blog.csdn.net/z69183787/article/details/12647539 声明:出现这个问题有程序方面.网络方面.weblogic设置方面等等原因,此文章主 ...
- LINUX下安装和配置WEBLOGIC10.0.3
weblogic for linux安装 首先声明,我参考了某位原创者的笔记,加以整理的.安装1. 安装前的准备工作1.1 首先请确认您要安装的Weblogic版本所在的平台已通过了BEA的认证,完整 ...
- Mac shell 小脚本开发(转)
大多数程序员都喜欢偷懒的,我也不例外.相信好多Android开发的coder 在网络http请求方面,会浪费很多时间在接口调试这里..有时候,自己写了一个小测试,行还好,不行的话,还要跟写后台的哥们一 ...
- Oracle: 通过命令行下载安装文件
1. 导出oracle cookies 参考:https://blog.pythian.com/how-to-download-oracle-software-using-wget-or-curl/ ...
- atomic原子操作
C++中对共享数据的存取在并发条件下可能会引起data race的未定义行为,需要限制并发程序以某种特定的顺序执行,有两种方式:1.使用mutex保护共享数据: 2.原子操作 原子操作:针对原子类型操 ...
- 碰撞检測之Sphere-Box检測
检測思路 首先要做的是将Box转为AABB,然后推断圆心是否在Box内.用的就是之前的SAT 假设圆心在Box内,肯定相交, 假设不在圆心内.则有四种情况,与顶点相交,与楞相交,与面相交,这里的确定也 ...
- 用CSS画小猪佩奇,你就是下一个社会人! js将“I am a coder”反转成 “coder a am I”,不许用split,join,subString,reverse;求解方法三
用CSS画小猪佩奇,你就是下一个社会人! 欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 作者:江志耿 | 腾讯TEG网络工程师 我是佩奇,哼,这是我的弟弟乔治,呱呱,这是我的妈妈,嚯 ...
- WEB服务器安装oracle jdbc
WEB服务器,如果想采用jdbc访问另一台Oracle数据库服务器,那么它应该先安装Oracle客户端,或者要安装oracle jdbc. 那么怎样安装oracle jdbc呢? 1.到oracle下 ...