洛谷P3230 比赛
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 比赛的更多相关文章
- [洛谷P1707] 刷题比赛
洛谷题目连接:刷题比赛 题目背景 nodgd是一个喜欢写程序的同学,前不久洛谷OJ横空出世,nodgd同学当然第一时间来到洛谷OJ刷题.于是发生了一系列有趣的事情,他就打算用这些事情来出题恶心大家-- ...
- 洛谷 P5595 【XR-4】歌唱比赛
洛谷 P5595 [XR-4]歌唱比赛 题目传送门 题目描述 小 X 参加了一场歌唱比赛. 经过一路鏖战,小 X 终于挺进了决赛,他的对手是小 Y. 这场歌唱比赛的冠军是由点赞数决定的,谁的点赞数高, ...
- 洛谷P2460 [SDOI2007]科比的比赛(题解)(贪心+搜索)
科比的比赛(题解)(贪心+搜索) 标签:算法--贪心 阅读体验:https://zybuluo.com/Junlier/note/1301158 贪心+搜索 洛谷题目:P2460 [SDOI2007] ...
- 洛谷比赛 「EZEC」 Round 4
洛谷比赛 「EZEC」 Round 4 T1 zrmpaul Loves Array 题目描述 小 Z 有一个下标从 \(1\) 开始并且长度为 \(n\) 的序列,初始时下标为 \(i\) 位置的数 ...
- 洛谷P2777 [AHOI2016初中组]自行车比赛
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- 洛谷比赛 U5442 买(最长链)
U5442 买 题目提供者bqsgwys 标签 树形结构 树的遍历 洛谷原创 题目背景 小E是个可爱的电路编码员. 题目描述 一天小E又要准备做电路了,他准备了一个电路板,上面有很多个电路元器件要安装 ...
- 洛谷八月月赛Round1凄惨记
个人背景: 上午9:30放学,然后因为学校举办读书工程跟同学去书城选书,中午回来开始打比赛,下午又回老家,中间抽出一点时间调代码,回家已经8:50了 也许是7月月赛时“连蒙带骗”AK的太幸运然而因同学 ...
- 关于三目运算符与if语句的效率与洛谷P2704题解
题目描述 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用“H” 表示),也可能是平原(用“P”表示),如下图.在每一格平原地形上最 ...
- 洛谷1001 A+B Problem
洛谷1001 A+B Problem 本题地址:http://www.luogu.org/problem/show?pid=1001 题目描述 输入两个整数a,b,输出它们的和(|a|,|b|< ...
随机推荐
- Linux df du 命令
df 命令 检查磁盘空间占用情况(并不能查看某个目录占用的磁盘大小). 命令格式:df [option] -h 以容易理解的格式(给人看的格式)输出文件系统分区使用情况,例如 10kB.10MB.10 ...
- element-ui + vue + node.js 与 服务器 Python 应用的跨域问题
跨越问题解决的两种办法: 1. 在 config => index.js 中配置 proxyTable 代理: proxyTable: { '/charts': { target: 'http: ...
- BugPhobia终章篇章:学霸在线系统Beta阶段展示
0x00 :序言 1 universe, 9 planets, 204 countries,809 islands, 7 seas, and i had the privilege to meet y ...
- Linux内核第三节 20135332武西垚
总结部分: Linux内核源代码: Arch 支持不同cpu的源代码:主要关注x86 Init 内核启动的相关代码:主要关注main.c,整个Linux内核启动代码start_kernel函数 K ...
- SPRINT四则运算(第二天)
1.小组成员: 李豌湄:master 江丹仪:产品负责人 2.现状: a.已经下载APP分析他们的界面.优缺点和闪光点 b.已改进代码添加功能 3.任务认领: 完成任务的第一个模块: a.下载五个类 ...
- PAT 1007 素数对猜想
https://pintia.cn/problem-sets/994805260223102976/problems/994805317546655744 让我们定义 d~n~ 为:d~n~ = p~ ...
- php 文件上传 $_FILES 错误码
假设文件上传字段的名称file_name,则: $_FILES['file_name']['error']有以下几种类型 1.UPLOAD_ERR_OK 其值为 0,没有错误发生,文件上传成功. 2. ...
- Linux预处理、编译、汇编、链接和运行的过程(包括一些基本的命令)
转自Quinn0918的博客 一.预编译 1.将所有的#define删除,并展开所有的宏定义: 2.处理所有的预编译指令,例如:#if,#elif,#else,#endif; 3.处理#include ...
- Cmder 常用配置
windows 系统的 cmd 命令窗口不是很好用,可以试试 Cmder 工具包. 1.在运行框中快速启动 Cmder 将 cmder.exe 文件所在目录加载环境变量 PATH 中. 2.把 cms ...
- IDEA 操作及快捷键总结
一.设置IDEA使用Eclipse快捷键 File->Settings->Keymap->选择Eclipse,就可以使用Eclipse的快捷键了,但是不能修改.如果想要修改,需要点击 ...