【HNOI2013】比赛
题面
题解
\(n \leq 9 \to\)爆搜
对每一场的结果进行搜索,最后进行\(\mathrm{check}\)
然后会发现没有什么分
搜索最重要的就是剪枝
接下来就列出一些剪枝
搜索时,强制每个人的得分不超过总分
如果一个人赢了所有的比赛也达不到总分,就直接退出
设比赛的总分为\(s\_all\),分出胜负的有\(sx\)场,平局的有\(sy\)场,那么有:
\(\begin{cases}3\times sx+2\times sy=sx\\sx+sy=\frac{n(n-1)}{2}\end{cases}\)
然后就可以解出\(sx\)和\(sy\),然后就可以限制场数了。
加上了这些剪枝之后,大概有\(60\)分,接下来就要想一些其他的优化。
接下来我们发现人数为\(s\),得分集合为\(A\)的方案数是相同的。
于是记忆化一下,hash就可以了
代码
#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
#include<map>
#define RG register
#define file(x) freopen(#x".in", "r", stdin);freopen(#x".out", "w", stdout);
#define clear(x, y) memset(x, y, sizeof(x))
inline int read()
{
int data = 0, w = 1; char ch = getchar();
while(ch != '-' && (!isdigit(ch))) ch = getchar();
if(ch == '-') w = -1, ch = getchar();
while(isdigit(ch)) data = data * 10 + (ch ^ 48), ch = getchar();
return data * w;
}
const int maxn(1010), Mod(1e9 + 7);
const unsigned long long X(31);
typedef unsigned long long ll;
int n, a[maxn], s[maxn], r[maxn], all, p, q, ans;
std::map<ll, ll> f; using std::sort;
inline void add(int &x, const int &y) { x += y; if(x >= Mod) x -= Mod; }
int dfs(int x, int y)
{
int ans = 0;
if(x == n) return 1;
if(a[x] + 3 * (n - y + 1) < s[x]) return 0;
if(y > n)
{
for(RG int i = x + 1; i <= n; i++) r[i] = s[i] - a[i];
sort(r + x + 1, r + n + 1);
ll ha = 0;
for(RG int i = x + 1; i <= n; i++) ha = ha * X + r[i];
if(f.find(ha) != f.end()) return f[ha];
else return f[ha] = dfs(x + 1, x + 2);
}
if(a[x] + 3 <= s[x] && p)
a[x] += 3, --p, add(ans, dfs(x, y + 1)), a[x] -= 3, ++p;
if(a[x] + 1 <= s[x] && a[y] + 1 <= s[y] && q)
++a[x], ++a[y], --q, add(ans, dfs(x, y + 1)), --a[x], --a[y], ++q;
if(a[y] + 3 <= s[y] && p)
a[y] += 3, --p, add(ans, dfs(x, y + 1)), a[y] -= 3, ++p;
return ans;
}
int main()
{
n = read();
for(RG int i = 1; i <= n; i++) all += (s[i] = read());
p = all - n * n + n; q = (all - 3 * p) >> 1;
sort(s + 1, s + n + 1, std::greater<int>());
printf("%d\n", dfs(1, 2));
return 0;
}
【HNOI2013】比赛的更多相关文章
- 【BZOJ3139】[HNOI2013]比赛(搜索)
[BZOJ3139][HNOI2013]比赛(搜索) 题面 BZOJ 洛谷 题解 双倍经验
- [HNOI2013]比赛 (用Hash实现记忆化搜索)
[HNOI2013]比赛 题目描述 沫沫非常喜欢看足球赛,但因为沉迷于射箭游戏,错过了最近的一次足球联赛.此次联 赛共N支球队参加,比赛规则如下: (1) 每两支球队之间踢一场比赛. (2) 若平局, ...
- [HNOI2013]比赛 搜索
[HNOI2013]比赛 搜索. LG传送门 直接暴力有60,考场上写的60,结果挂成40. 考虑在暴力的同时加个记忆化,把剩下的球队数和每支球队的得分情况hash一下,每次搜到还剩\(t\)个队的时 ...
- [BZOJ3139][HNOI2013]比赛(搜索)
3139: [Hnoi2013]比赛 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1439 Solved: 719[Submit][Status] ...
- 【题解】HNOI2013比赛
[题解][P3230 HNOI2013]比赛 将得分的序列化成样例给的那种表格,发现一行和一列是同时确定的.这个表格之前是正方形的,后来长宽都减去一,还是正方形.问题形式是递归的.这就启示我们可以把这 ...
- BZOJ1306 [CQOI2009]match循环赛/BZOJ3139 [Hnoi2013]比赛[dfs剪枝+细节题]
地址 看数据范围很明显的搜索题,暴力dfs是枚举按顺序每一场比赛的胜败情况到底,合法就累计.$O(3^{n*(n-1)/2})$.n到10的时候比较大,考虑剪枝. 本人比较菜所以关键性的剪枝没想出来, ...
- [BZOJ3139][HNOI2013] 比赛
Description 沫沫非常喜欢看足球赛,但因为沉迷于射箭游戏,错过了最近的一次足球联赛.此次联 赛共N支球队参加,比赛规则如下: (1) 每两支球队之间踢一场比赛. (2) 若平局,两支球队各 ...
- 3139:[HNOI2013]比赛 - BZOJ
题目描述 Description 沫沫非常喜欢看足球赛,但因为沉迷于射箭游戏,错过了最近的一次足球联赛.此次联赛共N只队伍参加,比赛规则如下: (1) 每两支球队之间踢一场比赛. (2) 若平局,两支 ...
- bzoj 3139: [Hnoi2013]比赛
Description 沫沫非常喜欢看足球赛,但因为沉迷于射箭游戏,错过了最近的一次足球联赛.此次联 赛共N支球队参加,比赛规则如下: (1) 每两支球队之间踢一场比赛. (2) 若平局,两支球队各得 ...
- [HNOI2013]比赛
题目描述 沫沫非常喜欢看足球赛,但因为沉迷于射箭游戏,错过了最近的一次足球联赛.此次联 赛共N支球队参加,比赛规则如下: (1) 每两支球队之间踢一场比赛. (2) 若平局,两支球队各得1分. (3) ...
随机推荐
- STL标签与EL表达式之间的微妙关系
很高兴,今天能和大家分享刚学的一些新知识.我们在java开发过程中经常会在jsp中嵌入一些java代码,比如<%=request.getParameter("id")%> ...
- MongoDB 安装和使用问题总结
1. 一直安装不了[一直next下去但最后没有发现生成文件夹] 去掉 Installing MongoDB Compass 前面的打勾 2. 需要开两个cmd运行mongodb 开第一个,输入以下运行 ...
- 如何生成.mobileprovision文件
如何生成.mobileprovision文件 本人视频教程系列 **.mobileprovision文件的生成的第一步就需要你提供一个用于开发的App ID 1. 创建App ID 创建一个bundl ...
- AppHangB1:explorer进程停止与Windows交互
现象:Windows 7,打开 “计算机” 的时候,资源管理器卡死,如图所示. 解决方法:卸载 CAD迷你看图软件,利用 CCleaner 清除注册表.
- asp.net core中DockerFile文件中的COPY
今天在ubuntu系统中使用docker部署asp.net core时遇到了一个问题,docker build 的时候总会在最后一步提示 lstat obj/Docker/publish: no su ...
- fiddler post 请求 webapi
今天小伙伴遇到一个问题,大概就是说用fiddler post 一个参数,但是后台一直无法获取,如下 后来发现请求的条件有问题,而且也很容易忽略,正确如下 content-type的设定为默认值,pos ...
- 铁乐学python_Day40_进程池
进程之间的数据共享 基于消息传递的并发编程是大势所趋, 即便是使用线程,推荐做法也是将程序设计为大量独立的线程集合,通过消息队列交换数据. 这样极大地减少了对使用锁和其他同步手段的需求,还可以扩展到分 ...
- September 14th 2017 Week 37th Thursday
Don't let the past steal your present. 别让过去悄悄偷走了我们的当下. We take what we can get and make the best of ...
- November 24th 2016 Week 48th Thursday
All the bright precious things fade so fast. 所有的光鲜靓丽都敌不过时间. What is permanent? Thoughts and ideas. P ...
- VMware下 CentOS 连接外网问题(笔记)
虚拟机连接外网有三种模式.桥接.Nat.Host-Only.三者的区别,详见 实例讲解虚拟机3种网络模式(桥接.nat.Host-only) 使用虚拟机连接外网时,一定要充分考虑本地的网络环境!!! ...