emmmmmm,这个之前讲课的原题居然出到比赛里了。

我怒肝2h+然后A了此题,结果还是被某高一巨佬吊打......


题意:n个球队两两比赛,胜得3分,败得0分,平得1分。

现有一个总分表,求问可能的比赛情况。

解:

发现答案与球队的顺序无关,于是按照分数排序。

然后发现可能搜到重复状态,可以记忆化吗?可以拿hash记忆化......(毒瘤)。

然后枚举当前第一队与其他队的胜负情况,这里我又写了个DFS(毒瘤 << 1)。

然后没了......注意这道题实现起来满满的毒瘤。

 #include <cstdio>
#include <algorithm> const int N = , B = , OM = , MO = 1e9 + ; struct Node {
int t, a[N], h, nex, ans;
inline void geth() {
h = ;
for(int i = ; i <= t; i++) {
h = h * B % OM + a[i];
while(h >= OM) {
h -= OM;
}
}
return;
}
inline bool operator ==(const Node &d) const {
if(t != d.t) {
return ;
}
for(int i = ; i <= t; i++) {
if(a[i] != d.a[i]) {
return ;
}
}
return ;
}
inline void st() {
std::sort(a + , a + t + );
std::reverse(a + , a + t + );
/*while(!a[t] && t) {
t--;
}*/
return;
}
inline void out() {
for(int i = ; i <= t; i++) {
printf("%d ", a[i]);
}
puts("");
return;
}
}node[], temp; int top; int head[OM]; inline int find(Node x) {
int h = x.h;
for(int i = head[h]; i; i = node[i].nex) {
if(node[i] == x) {
return node[i].ans;
}
}
return -;
} inline void insert(Node sta) {
int h = sta.h;
node[++top] = sta;
node[top].nex = head[h];
head[h] = top;
return;
} int DFS(Node, int); int DFSp(Node sta, int k, int lw) { // a[1] -> a[k] ing if(k > sta.t) {
if(sta.a[]) {
return ;
}
std::swap(sta.a[], sta.a[sta.t]);
sta.t--;
return DFS(sta, lw);
}
if((sta.t - k + ) * < sta.a[]) {
return ;
} int ans = ;
if(sta.a[k] >= ) { // 1 lose
sta.a[k] -= ;
ans += DFSp(sta, k + , lw - );
ans %= MO;
sta.a[k] += ;
}
if(sta.a[] >= ) { // 1 win
sta.a[] -= ;
ans += DFSp(sta, k + , lw - );
ans %= MO;
sta.a[] += ;
}
if(sta.a[] >= && sta.a[k] >= ) { // both
sta.a[] -= ;
sta.a[k] -= ;
ans += DFSp(sta, k + , lw);
ans %= MO;
}
return ans;
} int DFS(Node sta, int last) { sta.st();
if(sta.t == ) {
if(!last && !sta.a[]) {
return ;
}
return ;
} sta.geth();
int t = find(sta);
if(t > -) {
return t;
} int ans = DFSp(sta, , last); sta.ans = ans;
insert(sta); return ans;
} int main() { int n, tot = ;
scanf("%d", &n);
for(int i = ; i <= n; i++) {
scanf("%d", &temp.a[i]);
tot += temp.a[i];
} temp.t = n;
int ans = DFS(temp, tot - (n - ) * n); printf("%d", ans); return ;
}

AC代码

注意到洛谷rank1的搜索方法和我大同小异,但是速度吊打我14.75倍(毒瘤)。他以为这个东西可以用LL装下(真TM的可以!!!我是沙雕!),然后我就SB的又存又传了一大堆数组......

洛谷P3230 比赛的更多相关文章

  1. [洛谷P1707] 刷题比赛

    洛谷题目连接:刷题比赛 题目背景 nodgd是一个喜欢写程序的同学,前不久洛谷OJ横空出世,nodgd同学当然第一时间来到洛谷OJ刷题.于是发生了一系列有趣的事情,他就打算用这些事情来出题恶心大家-- ...

  2. 洛谷 P5595 【XR-4】歌唱比赛

    洛谷 P5595 [XR-4]歌唱比赛 题目传送门 题目描述 小 X 参加了一场歌唱比赛. 经过一路鏖战,小 X 终于挺进了决赛,他的对手是小 Y. 这场歌唱比赛的冠军是由点赞数决定的,谁的点赞数高, ...

  3. 洛谷P2460 [SDOI2007]科比的比赛(题解)(贪心+搜索)

    科比的比赛(题解)(贪心+搜索) 标签:算法--贪心 阅读体验:https://zybuluo.com/Junlier/note/1301158 贪心+搜索 洛谷题目:P2460 [SDOI2007] ...

  4. 洛谷比赛 「EZEC」 Round 4

    洛谷比赛 「EZEC」 Round 4 T1 zrmpaul Loves Array 题目描述 小 Z 有一个下标从 \(1\) 开始并且长度为 \(n\) 的序列,初始时下标为 \(i\) 位置的数 ...

  5. 洛谷P2777 [AHOI2016初中组]自行车比赛

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  6. 洛谷比赛 U5442 买(最长链)

    U5442 买 题目提供者bqsgwys 标签 树形结构 树的遍历 洛谷原创 题目背景 小E是个可爱的电路编码员. 题目描述 一天小E又要准备做电路了,他准备了一个电路板,上面有很多个电路元器件要安装 ...

  7. 洛谷八月月赛Round1凄惨记

    个人背景: 上午9:30放学,然后因为学校举办读书工程跟同学去书城选书,中午回来开始打比赛,下午又回老家,中间抽出一点时间调代码,回家已经8:50了 也许是7月月赛时“连蒙带骗”AK的太幸运然而因同学 ...

  8. 关于三目运算符与if语句的效率与洛谷P2704题解

    题目描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图.在每一格平原地形上最 ...

  9. 洛谷1001 A+B Problem

    洛谷1001 A+B Problem 本题地址:http://www.luogu.org/problem/show?pid=1001 题目描述 输入两个整数a,b,输出它们的和(|a|,|b|< ...

随机推荐

  1. iOS开发简记(3):tips提示

    我有一个需求:在点击或长按某个按钮时,需要显示提示,包括简单的文字提示,还有复杂一点的图片甚至是动态图的提示(可能还要加上文字). (1)文字tips 使用之前介绍的qmuikit里面的QMUITip ...

  2. Qt Creator 中,如何更改h,cpp,ui的文件并不让ui失效

    这个星期在使用qt,碰到一个很蛋疼的问题:创建对话框的时候,不小心输错了名字.而且是在很迟才发现的.这个时候对话框都已经布局差不多了,为了改名字,碰到更蛋疼的问题,改了名字后就无法使用转到槽的功能了. ...

  3. CSS 尺寸 (Dimension) 实例

    CSS 尺寸 (Dimension) 实例CSS 尺寸属性CSS 尺寸属性允许你控制元素的高度和宽度.同样,还允许你增加行间距. 属性 描述height 设置元素的高度.line-height 设置行 ...

  4. 线上mongodb 数据库用户到期时间修改的操作记录

    登陆版权数据库,显示"此用户已到期",数据库使用的是mongodb,顾 需要将此用户的到期时间延长. 解决过程: 1)到网站对应tomcat配置里找出等里mongodb的信息(mo ...

  5. A. Vasya and Chocolate

    链接 [http://codeforces.com/contest/1065/problem/A] 分析 一个公式完事 代码 #include<bits/stdc++.h> using n ...

  6. 第三个spring冲刺总结(附团队贡献分)

    基于调查需求下完成的四则运算,我们完成了主要的3大功能. 第一,普通的填空题运算,这个是传统的运算练习方式,团队都认为这个选项是必要的,好的传统要留下来,在个人经历中,填空练习是一个不错的选择. 第二 ...

  7. shell脚本--continue、break

    shell中的continue和break和其他语言中的使用方法一模一样:continue用于跳过本次循环,break用于中断本层的循环 下面是使用例子: #!/bin/bash #文件名:test. ...

  8. Java 泛型 1例

    private <T> T getFirstItem(List<T> list) {        T item = null;        if(list != null ...

  9. RedHat 5.6 问题简记

    1.XDMCP协议 使用XDMCP协议,需要配置“远程屏幕”(禁用+简介模式+与本地模式相同),注意不是"远程桌面"(这就是VNCServer). XDMCP协议与VNC协议的本质 ...

  10. Oracle10.2.0.1以及其他版本升级Oracle10.2.0.5的简单步骤

    Oracle没有发布 完整版的 Oracle 10.2.0.5 的安装包,只能是通过安装完10.2.0.4 之后再升级10.2.0.5 这一点挺坑的. 建安记录一下步骤. 1. 挂载Oracle10. ...