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. python升级后带来的几个小问题

    1)python升级带来的yum异常:File "/usr/bin/yum", line 30 原因:这是因为yum采用Python作为命令解释器,这可以从/usr/bin/yum ...

  2. Ubuntu14.04安装PyMuPDF

    最近写的一个东西需要将pdf转成图片然后放在网页上展示,找到了个非常好用的轮子叫做PyMuPDF,在windows上测试的时候跑的666,在ubuntu上安装依赖的时候,简直万脸懵逼.github上给 ...

  3. 面向对象课程 - T-shirt

    拿到了一件谜一样的T-shirt 吓得我赶紧捏了下hbb

  4. Oracle系列(二): Oracle表的外键查询

    在执行数据库删除操作时,外键关联是令我们最烦的一个东西,有了外键关联,就不允许随意删除数据,那么怎知道这个外键关联度的外键属于那个表? select * from user_cons_columns ...

  5. zookeeper安装Linux

    安装环境: Linux:centos6.4 Jdk:1.7以上版本 Zookeeper是java开发的可以运行在windows.linux环境.需要先安装jdk. 安装步骤: 第一步:安装jdk 第二 ...

  6. (html4与html5分别实现)用一个表单向php界面提交不同的命令

    先看上面的表单实例,分别有3个submit,只不过需要根据需要进行选择添加.删除或是修改.现在有两个方案. 方案一: 如果实在HTML4中,可以用下面的代码实现, 即将所有的submit提交到acce ...

  7. mongoose 入门基本操作

    简介 Mongoose是在node.js异步环境下对mongodb进行便捷操作的对象模型工具 那么要使用它,首先你得装上node.js和mongodb,关于mongodb的安装和操作介绍可以参考:ht ...

  8. hive外部表

    创建外部表.数据从HDFS获取  只是建立了链接,hdfs中的数据丢失,表中数据也丢失;hdfs数据增加,表中数据也增加 上传文件 创建外部表 删除文件 执行查询语句,发现少了

  9. python列表和元组操作

    列表 列表(list)是python以及其他语言中最常用到的数据结构之一.Python使用中括号[ ]来解析列表.列表是可变的(mutable)—可以改变列表的内容. 定义列表 names = ['m ...

  10. 部署AWStats分析系统

    介绍 AWStats是使用Prel语言开发的一款开源日志分析系统,它不仅可以用来分析Apache网站服务器的访问日志,也可以用来分析Samba.Vsftpd.IIS等服务的日志信息. AWStats软 ...