ACM学习历程—Hihocoder编程之美测试赛B题 大神与三位小伙伴(组合数学 )
描述
给你一个m x n (1 <= m, n <= 100)的矩阵A (0<=aij<=10000),要求在矩阵中选择一些数,要求每一行,每一列都至少选到了一个数,使得选出的数的和尽量的小。
输入
多组测试数据。首先是数据组数T
对于每组测试数据,第1行是两个正整数m, n,分别表示矩阵的行数和列数。
接下来的m行,每行n个整数,之间用一个空格分隔,表示矩阵A的元素。
输出
每组数据输出一行,表示选出的数的和的最小值。
数据范围
小数据:1 <= m, n <= 5
大数据:1 <= m, n <= 100
- 样例输入
-
2
3 3
1 2 3
3 1 2
2 3 1
5 5
1 2 3 4 5
5 1 2 3 4
4 5 1 2 3
3 4 5 1 2
2 3 4 5 1 - 样例输出
-
Case 1: 3
Case 2: 5
题目大意是有三类纪念品A、B、C。每类纪念品又有N种不同的纪念品Ai、Bi、Ci(1 <= i <= N),然后对于Ai纪念品的剩余个数CAi是N+1-i个,对于Bi纪念品的剩余个数CBi是N+1-i个,Ci纪念品的剩余个数CCi是N+1-i个。
要求拿出三件纪念品Ap, Bq, Ck,不能恰好有两件价值相同,求取法数。
可以从两个角度考虑:
(1) 从正面角度考虑:
不能恰好有两件价值相同,那么就是三件价值都相同或者都不同。
1. 三件价值都相同:
假设我都取价值为i的纪念品,那么就有CAi*CBi*CCi可以取(CAi、CBi、CCi分别为Ai、Bi、Ci剩余个数)
所以总数便是

2.三件价值都不同:
假设我A取了价值为i的纪念品,那么有CAi种;
那么B不能取价值为i的,假设B取了价值为j的,有CBj种;
那么C不能取价值为i和j的。
所以总数便是

此处说明一下,第一个式子是取A乘取B乘取C(取C是在C总数的基础上减去价值为i和j的)
第二个式子就是第一个式子变形的,将n+1-i替换为i’,同理的j和k。
第三个式子就是把i != j这个条件体现出来。
接下来进一步化简:

所以总的就是上面两种情况相加,得到

然后由下面三组式子便可以求解:

(2) 从反面角度考虑:
不能恰好有两件价值相同,那么就是总选数里面减去它就OK了。
总选数自然就是:

恰好有两件价值相同,那么就先从ABC三个里选出两种准备选价值相同的i,选法有C(2, 3),即3种。
然后剩余的一个不能选价值为i的,所以总数:

所以最后答案就是:

与第一种方法的答案一致。
代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <cstring>
#include <algorithm>
#include <set>
#include <map>
#include <vector>
#include <queue>
#include <string>
#define inf 0xfffffff
#define eps 1e-10
#define N 1000000007 using namespace std; long long n, C1, C2; void Init()
{
n %= N;
C1 = (n+)*n/;
C1 %= N;
C2 = (n+)*n/;
if (C2% == )
{
C2 /= ;
C2 %= N;
C2 *= *n+;
C2 %= N;
}
else
{
C2 %= N;
C2 *= (*n+)/;
C2 %= N;
}
} long long ans()
{
long long s = (C1*C1) % N;
s = (s*C1)%N + (*s)%N - (*((C1*C2)%N))%N;
return (s%N+N)%N;
} int main()
{
//freopen("test.txt", "r", stdin);
int T;
scanf("%d", &T);
for (int times = ; times <= T; ++times)
{
scanf("%lld", &n);
printf("Case %d: ", times);
Init();
printf("%lld\n", ans());
}
return ;
}
ACM学习历程—Hihocoder编程之美测试赛B题 大神与三位小伙伴(组合数学 )的更多相关文章
- ACM学习历程—Hihocoder 1233 Boxes(bfs)(2015北京网赛)
hihoCoder挑战赛12 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 There is a strange storehouse in PKU. In this ...
- ACM学习历程—Hihocoder [Offer收割]编程练习赛1
比赛链接:http://hihocoder.com/contest/hihointerview3/problem/1 大概有一个月没怎么打算法了.这一场的前一场BC,也打的不是很好.本来Div1的A和 ...
- ACM学习历程—Hihocoder 1291 Building in Sandbox(dfs && 离线 && 并查集)
http://hihocoder.com/problemset/problem/1291 前几天比较忙,这次来补一下微软笔试的最后一题,这题是这次微软笔试的第四题,过的人比较少,我当时在调试B题,没时 ...
- ACM学习历程—Hihocoder 1139 二分·二分答案(bfs)
http://hihocoder.com/problemset/problem/1139 这题提示上写的是二分,但是感觉不二分应该也可以,至少题目是AC的... 二分的思想就是二分答案的值,看能不能在 ...
- ACM学习历程—Hihocoder 1289 403 Forbidden(字典树 || (离线 && 排序 && 染色))
http://hihocoder.com/problemset/problem/1289 这题是这次微软笔试的第二题,过的人比第三题少一点,这题一眼看过去就是字符串匹配问题,应该可以使用字典树解决.不 ...
- ACM学习历程—Hihocoder 1290 Demo Day(动态规划)
http://hihocoder.com/problemset/problem/1290 这题是这次微软笔试的第三题,过的人比第一题少一点,这题一眼看过去就是动态规划,不过转移方程貌似不是很简单,调试 ...
- ACM学习历程—Hihocoder 1288 Font Size(暴力 || 二分)
http://hihocoder.com/problemset/problem/1288 这题是这次微软笔试的第一题,关键的是s的上限是min(w, h),这样s的范围只有到1000,这样就可以直接暴 ...
- ACM学习历程—Hihocoder 1164 随机斐波那契(数学递推)
时间限制:5000ms 单点时限:1000ms 内存限制:256MB 描述 大家对斐波那契数列想必都很熟悉: a0 = 1, a1 = 1, ai = ai-1 + ai-2,(i > 1). ...
- ACM学习历程—Hihocoder 1178 计数(位运算 && set容器)(hihoCoder挑战赛12)
时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Rowdark是一个邪恶的魔法师.在他阅读大巫术师Lich的传记时,他发现一类黑魔法来召唤远古生物,鱼丸. 魔法n能召 ...
随机推荐
- scikit-learn(project中用的相对较多的模型介绍):2.3. Clustering(可用于特征的无监督降维)
參考:http://scikit-learn.org/stable/modules/clustering.html 在实际项目中,我们真的非常少用到那些简单的模型,比方LR.kNN.NB等.尽管经典, ...
- String 的fomat方法日期转换
一.常规类型.字符类型和数值类型的格式说明符的语法如下:%[argument_index$][flags][width][.precision]conversion 可选的 argument_inde ...
- HDFS源码分析数据块复制监控线程ReplicationMonitor(一)
ReplicationMonitor是HDFS中关于数据块复制的监控线程,它的主要作用就是计算DataNode工作,并将复制请求超时的块重新加入到待调度队列.其定义及作为线程核心的run()方法如下: ...
- Gmail上不去怎么办?
近期非常多人反映Gmail上不去.每到重大政治事件附近,国家的防火墙就会加固一些. 事实上仅仅要下一个软件就能够轻松解决Google.Gmail上不去的问题. 下载地址 下载解压后点击"我要 ...
- Gitlab来做代码review
Gitlab来做代码review 代码review是代码质量保障的手段之一,同时开发成员之间代码review也是一种技术交流的方式,虽然会占用一些时间,但对团队而言,总体是个利大于弊的事情.如何借助现 ...
- WinDbg调试分析 net站点 CPU100%问题
WinDbg调试分析 asp.net站点 CPU100%问题 公司为了节省成本,最近有一批服务器降了配置,CPU从8核降到了2核.本身是小站点,访问量也不高,CPU总是会飙到100%而且可以一直持续几 ...
- 【转】【Pycharm大全】
感谢:陈俊岭的程序员之路 [Pycharm大全]:http://blog.csdn.net/u013088062/article/details/50388329
- 怎样实现动态加入布局文件(避免 The specified child already has a parent的问题)
首先扯点别的:我应经连续上了两个星期的班了,今天星期一.是第三个周.这个班上的也是没谁了.近期老是腰疼. 预计是累了.近期也没跑步.今天下班继续跑起. 这篇文章讲一讲怎样在一个布局文件里动态加在一个布 ...
- iOS 逆向 - Class-dump 安装和使用方法
1.下载安装包 http://stevenygard.com/projects/class-dump/,这里我下载的是 class-dump-3.5.dmp.然后把下载下来的 dmg 打开,复制文件里 ...
- 九度OJ 1015:还是A+B (基础题)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:6773 解决:4031 题目描述: 读入两个小于10000的正整数A和B,计算A+B.需要注意的是:如果A和B的末尾K(不超过8)位数字相同 ...