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 --------------------------------------------------------------- ...
随机推荐
- 16 个常用的yum 命令
1. yum [-y] install package_name2. yum remove package_name 卸载指定软件3. ...
- codeforces 938F(dp+高维前缀和)
题意: 给一个长度为n的字符串,定义$k=\floor{log_2 n}$ 一共k轮操作,第i次操作要删除当前字符串恰好长度为$2^{i-1}$的子串 问最后剩余的字符串字典序最小是多少? 分析: 首 ...
- Protobuf 完整解析 - 公司最常用的数据交互协议
Google Protocol Buffer(简称 Protobuf)是一种轻便高效的结构化数据存储格式,平台无关.语言无关.可扩展,可用于通讯协议和数据存储等领域. 数据交互xml.json.pro ...
- 转: 关于Linux常用的二进制文件分析方法
当你在unix下拿到一个二进制文件但不知道它是什么的时候,可以通过以下方法得到一此提示 1. 最首先应该尝试strings命令,比如拿到一个叫cr1的二进制文件,可以: $ strings cr1 | ...
- 随机森林、gbdt算法
http://blog.csdn.net/songzitea/article/details/10035757 http://blog.csdn.net/holybin/article/details ...
- DacningLinks实现
本文简单分析DancingLinks实现中的数据结构设计,给出了精确覆盖问题及其扩展问题的代码.并应用于数独问题. 先简单描写叙述一下精确覆盖问题: 给定一个N*M的01矩阵,从中选中若干行,这些行向 ...
- iOS xmpp的使用
#import "AppDelegate.h" //#import "DBAreaItem.h" #pragma mark - #pragma mark Pri ...
- 通过SQL SERVER加入系统管理员帐号
通过SQL SERVER加入系统管理员帐号.当然是须要有足够的权限,远程链接数据库后执行脚本,脚本例如以下: /* 此代码是在master数据库下执行 添加系统管理员:mmcgzs password: ...
- AIDL/IPC Android AIDL/IPC 进程通信机制——超具体解说及使用方法案例剖析(播放器)
首先引申下AIDL.什么是AIDL呢?IPC? ------ Designing a Remote Interface Using AIDL 通常情况下,我们在同一进程内会使用Binder.Broad ...
- android真机调试 INSTALL_FAILED_MEDIA_UNAVAILABLE 问题解决方案
前提是手机用数据线连到电脑,安装好手机对应的驱动. 1:打开cmd 2:cd切换到sdk安装目录的platform-tools目录,比如我安装到了D盘根目录,则输入: cd d:\android-sd ...