card

news/2025/10/6 21:18:12/文章来源:https://www.cnblogs.com/KsCla/p/19127944
#include <bits/stdc++.h>
using namespace std;
#define P pair<char, char>
#define mp(x, y) make_pair(x, y)vector< P > oper_list;
const int len = 4;
const int wide = 4;
const int _size = len * wide;
const int _num = _size + (_size&1);
const int half = (_num >> 1);
const int _dir = 4;
const int maxs = 43046721;
char f[maxs], g[maxs];
int rev[maxs];
char step_forward[_size][_dir];
char board[_size], sum_board = 0;
char belong[_size], sum_belong = 0;
bool used[_num];
char card[_num][_dir];
int next_k = -1, next_x = -1;
char input_size = 0;
char now_player = 0;inline void Extend(int s,char *_map) {for (int i=0; i<_size; i++) _map[i] = s%3-1, s/=3;
}inline int Mark(char *_map) {int s=0;for (char i=_size-1; i>=0; i--) s = (s<<1) + s + (_map[i]+1);return s;
}inline int Rev(char *_map) {for (int i=0; i<_size; i++) if (_map[i] != -1) _map[i] = 1 - _map[i];return Mark(_map);
}char Dp(char *p, int s) {if (p[s] != -1) return p[s];if (p == f) {f[s] = 0;char _map[_size], new_map[_size];Extend(s, _map);for (char x=0; x<_size; x++) if (_map[x] == -1) {for (int i=0; i<_size; i++) new_map[i] = _map[i];new_map[x] = 1;char score = 0;for (char u=0; u<_dir; u++) {char move_to = step_forward[x][u];if (move_to == -1 || new_map[move_to] != 0) continue;++score;new_map[move_to] = 1;}int t = Mark(new_map);f[s] = max(f[s], (char)(score + Dp(g, t)));}}else {g[s] = 100;char _map[_size], new_map[_size];Extend(s, _map);for (char x=0; x<_size; x++) if (_map[x] == -1) {for (int i=0; i<_size; i++) new_map[i] = _map[i];new_map[x] = 0;int t = Mark(new_map);g[s] = min(g[s], Dp(f, t));}if (g[s] == 100) g[s] = 0;}return p[s];
}inline void Preprocess() {for (int i=0; i<_size; i++){if (i < wide) step_forward[i][0] = -1;else step_forward[i][0] = i - wide;if (i % len == 0) step_forward[i][1] = -1;else step_forward[i][1] = i - 1;if (i + wide < _size) step_forward[i][2] = i + wide;else step_forward[i][2] = -1;if (i % len == len - 1) step_forward[i][3] = -1;else step_forward[i][3] = i + 1;}memset(f, -1, sizeof(f));memset(g, -1, sizeof(g));char tmp_map[_size];for (int s=0; s<maxs; s++) {Dp(f, s);Dp(g, s);Extend(s, tmp_map);rev[s] = Rev(tmp_map);}
}inline void Simulate(char k, char x) {oper_list.push_back( mp(k, x) );board[x] = k;bool cur = (k >= half? 1: 0);sum_board += cur;belong[x] = cur;sum_belong += cur;used[k] = true;for (int u=0; u<_dir; u++) if (step_forward[x][u] != -1) {char move_to = step_forward[x][u];if (board[move_to] != -1) {char p = board[move_to];char &val = belong[move_to];if (val != cur) {char v = (u >= 2? u-2: u+2);if (card[k][u] > card[p][v]) {sum_belong -= val;val = cur;sum_belong += cur;}}}}
}inline void Initialize() {freopen("chess.in", "r", stdin);for (int i=0; i<_num; i++)for (int j=0; j<_dir; j++) {int val = 0;cin >> val;card[i][j] = val;}memset(board, -1, sizeof(board));memset(belong, -1, sizeof(belong));memset(used, false, sizeof(used));int k = -1, x = -1;cin >> k >> x;while (k >= 0) {Simulate(k, x);k = -1, x = -1;cin >> k >> x;}fclose(stdin);input_size = oper_list.size();
}inline void Reverse(char k, char x, char *tmp_belong, char tmp_sum) {oper_list.pop_back();board[x] = -1;if (k >= half) --sum_board;for (int i=0; i<_size; i++) belong[i] = tmp_belong[i];sum_belong = tmp_sum;used[k] = false;
}char Dfs(char cur, char min_limit, char max_limit) {char now_score = sum_belong - sum_board;if (oper_list.size() == _size) return now_score;char invalid = (cur? 100: -100);int s = Mark(belong);int t = rev[s];if (cur) {if (now_score - g[t] >= max_limit) return invalid;if (now_score + f[s] <= min_limit) return min_limit;}else {if (now_score + g[s] <= min_limit) return invalid;if (now_score - f[t] >= max_limit) return max_limit;}char top_score = -invalid;char enemy = (cur == 0? half: 0);char tmp_sum = sum_belong;char tmp_belong[_size];for (int i=0; i<_size; i++) tmp_belong[i] = belong[i];for (char k=cur; k< cur + half; k++) if (!used[k])for (char x=0; x<_size; x++) if (board[x] == -1) {Simulate(k, x);char score = Dfs(enemy, min_limit, max_limit);Reverse(k, x, tmp_belong, tmp_sum);if (cur) {if (score >= max_limit) return invalid;if (score <= min_limit) continue;min_limit = score;if (score > top_score) {top_score = score;if (oper_list.size() == input_size) next_k = k, next_x = x;}}else {if (score <= min_limit) return invalid;if (score >= max_limit) continue;max_limit = score;if (score < top_score) {top_score = score;if (oper_list.size() == input_size) next_k = k, next_x = x;}}}if (top_score == -invalid) {if (cur) return min_limit;else return max_limit;}return top_score;
}int main(void) {Preprocess();Initialize();now_player = ((oper_list.size() > 0) && (oper_list.rbegin()->first >= half)? 0: half);clock_t start = clock();int ans = Dfs(now_player, -100, 100);clock_t end = clock();cout << (end - start) / 1000000.0 << endl;cout << ans << endl;cout << next_k << " " << next_x << endl;for (int i=0; i<_dir; i++) cout << (int)card[next_k][i] << " ";return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/929716.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

济宁企业网站建设wordpress页面发布不

打开题目 几次尝试&#xff0c;发现输1 1"&#xff0c;页面都会回显NO,Wrong username password&#xff01;&#xff01;&#xff01; 只有输入1&#xff0c;页面报错&#xff0c;说明是单引号的字符型注入 那我们万能密码试试能不能登录 1 or 11 # 成功登录 得到账号…

网站的建设及维护报告闵行做网站公司铝棒易站公司

目录 1.什么是互联网 2.互联网的发展历史 3.中国互联网的发展历程 4.互联网对人们生活的影响 5.互联网给人类带来了哪些负面影响 1.什么是互联网 互联网&#xff08;Internet&#xff09;是一个全球性的计算机网络系统&#xff0c;它连接了数十亿台计算机和其他设备。它是由…

Ai元人文系列:领域协同深耕:构建人机价值共生的文明实践框架

Ai元人文系列:领域协同深耕:构建人机价值共生的文明实践框架 引言:从割裂到共生的文明演进 我们正站在一个历史性的十字路口。数字技术的浪潮以前所未有的力量重塑着人类社会的基本结构,而人工智能的出现更是将这场…

如何监测光伏系统中的电能质量挑战?分布式光伏电能质量解决方案

如何监测光伏系统中的电能质量挑战?分布式光伏电能质量解决方案pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "C…

NFL统一数据生态系统技术架构解析

本文深入解析NFL如何通过统一数据生态系统提升运营效率,涵盖数据治理、数据工程、数据解决方案等五大技术支柱,实现从球员安全到球迷互动的全方位数据驱动决策。NFL统一数据生态系统:从球员安全到球迷互动 NFL正在通…

网站开发和运营维护兰州广告设计制作公司

文章目录一、基础准备1. 技术选型2. 源码克隆3. 安装依赖4. 将 RuoYi-Cloud 项目导入到 IDEA5. 安装启动Mysql6. 安装启动Redis7. 创建数据库&#xff0c;执行 SQL脚本文件二、安装与配置 nacos2.1. 下载nacos2.2. 安装 nacos2.3. nacos持久化配置2.4. 执行脚本文件2.5. nacos连…

大型网站后台登录地址一般是如何设置的虚拟主机购买网站

字典是具有指定数字或键的特定数据集或组。在 Python 以外的编程语言中&#xff0c;它们也被称为哈希映射或关联数组。 一般来说&#xff0c;它是键值对的形式&#xff0c;就像现实世界的字典一样。 要创建字典&#xff0c;请从左括号开始&#xff0c;添加键并键入一个冒号。…

网站制作老了株洲网站建设 公司

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号&#xff1a;山青咏芝&#xff08;shanqingyongzhi&#xff09;➤博客园地址&#xff1a;山青咏芝&#xff08;https://www.cnblogs.com/strengthen/&#xff09;➤GitHub地址&a…

专业网站开发软件做一个网站的总结

responseBody注解的作用是将controller的方法返回的对象通过适当的转换器转换为指定的格式之后&#xff0c;写入到response对象的body区&#xff0c;通常用来返回JSON数据或者是XML数据&#xff0c;需要注意的呢&#xff0c;在使用此注解之后不会再走视图处理器&#xff0c;而是…

爱站网长尾词挖掘工具建站网址导航hao123

&#x1f4a2;欢迎来到张胤尘的开源技术站 &#x1f4a5;开源如江河&#xff0c;汇聚众志成。代码似星辰&#xff0c;照亮行征程。开源精神长&#xff0c;传承永不忘。携手共前行&#xff0c;未来更辉煌&#x1f4a5; 文章目录 通道通道声明初始化缓冲机制无缓冲通道代码示例 带…

建构网站婚礼网站有哪些

9月16日消息&#xff0c;锦欣生殖近日宣布已完成新一轮的战略投资&#xff0c;本轮融资由原战略股东华平投资及新引入的中信银行旗下信银投资领投&#xff0c;红杉资本中国基金、药明康德等跟投。完成本轮融资后&#xff0c;华平投资及信银投资分别成为锦欣生殖的第二及第三大股…

深入解析:【C++项目】负载均衡在线OJ系统-1

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

网站制作中文版wordpress放广告

戳蓝字“CSDN云计算”关注我们哦&#xff01;作者 | 成全责编 | 阿秃转自 | 美团技术团队企业博客前言mpvue是一款使用Vue.js开发微信小程序的前端框架。使用此框架&#xff0c;开发者将得到完整的 Vue.js 开发体验&#xff0c;同时为H5和小程序提供了代码复用的能力。如果想将…

实用指南:SCDN如何同时保障网站加速与DDoS防御?

实用指南:SCDN如何同时保障网站加速与DDoS防御?pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas",…

二分查找模板:基础二分与进阶二分

二分查找模板:基础二分与进阶二分 本人在学习到 @灵茶山艾府 的二分查找专题时,收获颇多,故借助大模型记录一些学习心得。 根据目标不同,二分查找可以分为 基础二分(情况1:查找任意一个目标值)和 进阶二分(查找…

【设计模式-4.5】行为型——迭代器模式 - 教程

【设计模式-4.5】行为型——迭代器模式 - 教程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &q…

阿里云centos7做网站免费psd模板网站

win7输入密码界面背景怎么更改?win7开机的登录密码界面想要换张图不晓得如何改&#xff0c;下面是小编介绍win7登录界面换背景的技巧&#xff0c;有需要的小伙伴一起来下文看看吧&#xff0c;希望可以帮助到大家! win7输入密码界面背景怎么更改 按windowss键R键打开运行&…

运动鞋建设网站前的市场分析企业免费oa管理系统

系统架构 Flink运行时架构Standalone会话模式为例 1&#xff09;作业管理器&#xff08;JobManager&#xff09; JobManager 是一个 Flink 集群中任务管理和调度的核心&#xff0c;是控制应用执行的主进程。每个应用都应该被唯一的 JobManager 所控制执行。 JobManger 又包含…

浅谈并查集

带权并查集 Luogu P2024 经典例题食物链。 题意:\(n\) 个动物,可能是三个物种之一,给出若干描述,形如两个动物是同类或是吃与被吃的关系,确定出矛盾的描述。 考虑建图,有边相连代表确定一个确定另一个关系,这是…