出题的诀窍

题目链接:https://ac.nowcoder.com/acm/contest/393/C

题解:

由于他是在每一行选取一个元素,然后纵向来比较,这里行的顺序是不会影响的,所以我们将每一个数存入哈希表中,然后对每一个数来进行考虑。

第一行的数,对答案的贡献为mn-1,而第二行对答案的贡献为mn-2*(m-1)...以此类推。

这里注意对同一行有多个相同元素的情况考虑一下。

代码如下:

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = , M = , MOD = 1e9 + ;
ll a[N][N], pm[N];
int n, m;
struct Edge {
ll v, next, i;
} e[N * N];
ll head[M], tot, h[M];
ll f[N * N], d[N * N];
void adde(ll u, ll v, ll i) {
e[tot].i = i;
e[tot].v = v;
e[tot].next = head[u];
head[u] = tot++;
}
void hsh(ll x, ll y) {
ll now = x % M;
while(h[now] != - && h[now] != x) {
now += ;
if(now >= M)
now -= M;
}
h[now] = x;
adde(now, x, y);
}
int main() {
ios::sync_with_stdio(false);
cin.tie();
cin >> m >> n;
memset(head, -, sizeof(head));
memset(h, -, sizeof(h));
pm[] = ;
for(int i = ; i <= n; i++)
pm[i] = pm[i - ] * m % MOD;
for(int i = ; i <= n; i++) {
for(int j = ; j <= m; j++) {
cin >> a[i][j];
hsh(a[i][j], i);
}
}
ll ans = , cnt, num, pr;
for(int x = ; x < M; x++) {
if(h[x] != -) {
pr = ;
cnt = ;
num = ;
for(int i = head[x]; i != -; i = e[i].next) {
d[++cnt] = e[i].i;
}
for(int i = ; i <= cnt; i++) {
if(i == || d[i] != d[i - ])
f[++num] = ;
else
f[num]++;
}
for(int i = ; i <= num; i++) {
ans += pm[n - i] * pr % MOD * f[i] % MOD * h[x] % MOD;
pr = pr * (m - f[i]) % MOD;
ans %= MOD;
}
}
}
cout << ans;
return ;
}

最新文章

  1. Java学习笔记之JNDI(六)
  2. Selenium - CSS Selector
  3. Form_通过Trace分析Concurrent和Form性能和异常详解(案例)
  4. Linux 通过 load average 判断服务器负载情况
  5. 快速学习使用 Windows Azure 上的 SharePoint Server 2013
  6. VSTO学习笔记(十四)Excel数据透视表与PowerPivot
  7. lynx---CentOS终端访问IP
  8. Flipping Parentheses~Gym 100803G
  9. Python练手例子(1)
  10. Android 全局使用第三方字体
  11. 20175212童皓桢 《Java程序设计》第一周学习
  12. 7 ArcMap能复制,不能粘贴
  13. golang 的 mysql 操作
  14. Matlab批量处理指定文件夹下的所有音频文件
  15. 给本地服务器配置py文件的下载功能
  16. 130. Surrounded Regions (Graph; DFS)
  17. uoj 48 核聚变反应强度 次小公因数
  18. 实现Map按key或按value排序
  19. nodejs的安装配置
  20. Codeforces 900C. Remove Extra One(暴力)

热门文章

  1. Java and SDK 环境变量设置
  2. (Python爬虫02) 制定爬虫的学习计划了
  3. HADOOP-输出数据实体类承载
  4. Multi-task Correlation Particle Filter for Robust Object Tracking--论文随笔
  5. APUE学习笔记3_文件IO
  6. Linux内核设计笔记13——虚拟文件系统
  7. 2.hbase原理(未完待续)
  8. HDU 2492 Ping pong(数学+树状数组)(2008 Asia Regional Beijing)
  9. 20145214 《Java程序设计》第8周学习总结
  10. windows下cudnn的安装过程