关于猪国杀

news/2024/4/24 19:55:25/文章来源:https://www.cnblogs.com/Chencgy/p/16754291.html

从今天下午开始看题 于2022.10.4 19:26:23在 \(loj\) \(ac\)

没有大改,没有重构,框架一遍过

下面是原版代码

code
#include<bits/stdc++.h>
using namespace std;
#define MP 3
#define ZP 1
#define FP 2
char in[100];
int n, m;
char muopai(){if(m){cin >> in;--m;}return in[0];
}
int cntfp;
struct PIG{int sf;//身份 1 忠 2 反 3 主bool jump_zhong, jump_fan, lei_fan, have_zhuangbei;int hp;int nxt, id, from;vector<char>sp;//手牌void mp(int x){//摸牌,张数for(int i = 1; i <= x; ++i)sp.push_back(muopai());// cout << " I mp :: ";// for(char c : sp)cout << c << " " ;// cout << endl;}
}p[15];
bool game_over;void MAKE_DR(int from, int to){// cout << from << "bdy to " << to << endl;if(p[from].sf == MP)return;if(p[to].sf == MP || p[to].jump_zhong){p[from].jump_fan = 1;return;}if(p[to].jump_fan){p[from].jump_zhong = 1;return;}
}
void MAKE_FRIEND(int from, int to){// cout << from << " xyq to " << to << endl;if(p[to].sf == MP)p[from].jump_zhong = 1, p[from].lei_fan = 0;p[from].jump_fan |= p[to].jump_fan;p[from].jump_zhong |= p[to].jump_zhong;
}
void NEED_TAO(int x, int from){auto y = p[x].sp.begin();for(; y != p[x].sp.end(); ++y)if((*y) == 'P'){p[x].sp.erase(y); ++p[x].hp; return;}p[p[x].from].nxt = p[x].nxt;p[p[x].nxt].from = p[x].from;if(p[x].sf == MP){game_over = 1; return;}if(p[x].sf == ZP && p[from].sf == MP){p[from].sp.clear(); p[from].have_zhuangbei = 0; return;}if(p[x].sf == FP){--cntfp; if(cntfp == 0){game_over = 1; return;} p[from].mp(3);}
}
bool NEED_SHAN(int x){auto y = p[x].sp.begin();for(; y != p[x].sp.end(); ++y)if((*y) == 'D'){p[x].sp.erase(y);return true;}return false;
}
bool NEED_SHA(int x){auto y = p[x].sp.begin();for(; y != p[x].sp.end(); ++y)if((*y) == 'K'){p[x].sp.erase(y);return true;}return false;
}
bool NEED_WXKJ(int x){auto y = p[x].sp.begin();for(; y != p[x].sp.end(); ++y)if((*y) == 'J'){p[x].sp.erase(y);return true;}return false;
}
void USE_KILL(int from, int to){// cout << from << "use KILL to" << to << endl;if(p[from].sf != MP || p[to].sf != ZP)MAKE_DR(from, to);if(!NEED_SHAN(to)){--p[to].hp; if(p[to].hp < 1)NEED_TAO(to, from);}
}bool check_make_friend(int now, int x){if(p[x].sf == MP && (p[now].sf == ZP || p[now].sf == MP))return true;if(p[x].jump_zhong && (p[now].sf == MP || p[now].sf == ZP))return true;if(p[x].jump_fan && p[now].sf == FP)return true;return false;
}
bool check_make_dr(int now, int x){if(now == x)return false;if(p[x].sf == MP && p[now].sf == FP)return true;if(p[x].jump_fan && (p[now].sf == MP || p[now].sf == ZP))return true;if(p[x].jump_zhong && p[now].sf == FP)return true;if(p[x].lei_fan && p[now].sf == MP)return true;return false;
}
bool get_WXKJ_dr(int x){int now = p[x].nxt;while(now != x){if(check_make_dr(now, x) && NEED_WXKJ(now)){MAKE_DR(now, x);if(get_WXKJ_dr(now) == false)return true;else return false;}now = p[now].nxt;}return false;
}
bool get_WXKJ_friend(int x, int used){int now = used;do{// if(now == 5 && x == 4)cout << check_make_friend(now, x) << " " << p[x].jump_fan << endl;if(check_make_friend(now, x) && NEED_WXKJ(now)){MAKE_FRIEND(now, x);if(get_WXKJ_dr(now) == false)return true;else return false;}now = p[now].nxt;}while(now != used);return false;
}void USE_FIGHT(int from, int to){if(p[from].sf == MP && p[to].sf == ZP){if(get_WXKJ_friend(to, from))return;--p[to].hp;if(p[to].hp < 1)NEED_TAO(to, from);return;}MAKE_DR(from, to);if(get_WXKJ_friend(to, from))return;for(int round = 1; true; ++round){if(round & 1){if(NEED_SHA(to))continue;--p[to].hp;if(p[to].hp < 1)NEED_TAO(to, from);}else {if(NEED_SHA(from))continue;--p[from].hp;if(p[from].hp < 1)NEED_TAO(from, to);}break;}
}
void USE_NZRQ(int from){// cout << from << " used NZRQ" << endl;int now = p[from].nxt;while(now != from){int nxt = p[now].nxt;if(!get_WXKJ_friend(now, from))if(!NEED_SHA(now)){--p[now].hp;if(p[now].sf == MP)p[from].lei_fan = 1;if(p[now].hp < 1)NEED_TAO(now, from);}if(game_over)return;now = nxt;}// cout << p[now].hp << " " << p[now].jump_fan << " " << p[now].jump_zhong << " " << p[now].lei_fan << endl;}
void USE_WJQF(int from){// cout << from << " used WJQF" << endl;int now = p[from].nxt;while(now != from){int nxt = p[now].nxt;if(!get_WXKJ_friend(now, from))if(!NEED_SHAN(now)){--p[now].hp;if(p[now].sf == MP)p[from].lei_fan = 1;if(p[now].hp < 1)NEED_TAO(now, from);}if(game_over)return;now = nxt;}
}
void print(){// for(int i = 1; i <= n; ++i){// 	cout << i << " " << p[i].hp << " ";// 		if(p[i].hp > 0){// 		for(char c : p[i].sp)cout << c << " ";// 		cout << endl;// 	}else cout << "DEAD\n";// }// cout << endl;// for(int i = 1; i <= n; ++i)cout << p[i].from << " " << p[i].nxt << "  ";// cout << endl;
}
int find_DR(int now){int l = p[now].nxt;while(l != now){if(p[l].hp < 1){l = p[l].nxt;continue;}if(p[now].sf == FP){if(p[l].sf == MP)return l;if(p[l].jump_zhong)return l;}if(p[now].sf == ZP){if(p[l].jump_fan)return l;}if(p[now].sf == MP){if(p[l].jump_fan ||(!p[l].jump_zhong && p[l].lei_fan))return l;}l = p[l].nxt;}return 0;
}
void play(int now){bool out = 1, CAN_KILL = 1;while(out && !game_over && p[now].hp > 0){out = 0;auto x = p[now].sp.begin();for(; x != p[now].sp.end(); ++x){if((*x) == 'P' && p[now].hp < 4){++p[now].hp; out = 1; p[now].sp.erase(x); break;}if((*x) == 'K' && (CAN_KILL || p[now].have_zhuangbei)){int dr = find_DR(now);if(dr == p[now].nxt){out = 1; CAN_KILL = 0;p[now].sp.erase(x);USE_KILL(now, dr);break;}}if((*x) == 'F'){int dr = find_DR(now);if(p[now].sf == FP)dr = 1;if(dr){out = 1;p[now].sp.erase(x);USE_FIGHT(now, dr);break;}}if((*x) == 'N'){p[now].sp.erase(x);out = 1;USE_NZRQ(now);break;}if((*x) == 'W'){p[now].sp.erase(x);out = 1;USE_WJQF(now);break;}if((*x) == 'Z'){p[now].have_zhuangbei = 1;p[now].sp.erase(x);out = 1;break;}}if(out)print();}
}void start_game(){int now = 1;do{if(p[now].hp < 1){now = p[now].nxt;continue;}// cout << now << " ";p[now].mp(2);play(now);now = p[now].nxt;}while(!game_over);
}int main(){cin >> n >> m;m += n * 4;for(int i = 1; i <= n; ++i){cin >> in;if(in[0] == 'M')p[i].sf = MP;if(in[0] == 'Z')p[i].sf = ZP;if(in[0] == 'F')p[i].sf = FP, ++cntfp;p[i].mp(4); p[i].hp = 4; p[i].nxt = i + 1; p[i].id = i; p[i].from = i - 1;}p[1].from = n;p[n].nxt = 1;start_game();if(cntfp)cout << "FP\n";else cout << "MP\n";for(int i = 1; i <= n; ++i)if(p[i].hp > 0){for(char c : p[i].sp)cout << c << " ";cout << endl;}else cout << "DEAD\n";return 0;
}

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

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

相关文章

差错控制(检错编码)

差错的起因 总的来说&#xff0c;传输中的差错都是由于噪声引起的。 全局性&#xff1a;1.由于线路本身电气特性所产生的随机噪声&#xff08;热噪声&#xff09;&#xff0c;是信道固有的&#xff0c;随机存在的。 解决方法&#xff1a;提高信噪比来减少或避免干扰。&#xf…

【分布式命名系统】Distributed Hash Tables (Chord)分布式哈希表

一、背景 1.命名系统&#xff1a; 分布式系统的命名系统主要是为了解决Name 与 Address 的对应问题&#xff0c;即如何使用 Name 找到 Address 几个概念&#xff1a; Name: 表示名称的字符串 entity: 实体 —— 资源&#xff0c;如硬盘&#xff0c;主机等 Address: 将 Name …

计算机毕业设计-基于SSM的音乐推荐管理系统

项目摘要 中国风音乐推介网站近年来已成为风靡全球的新兴艺术形式。国内涌现出了大批优秀、有才华的爱好者和许多经久不衰的经典作品。中国风音乐推介网站的兴起打破了音乐界格局,也突破了原有分类唱法发展中的瓶颈,为声乐艺术的发展开辟了新篇章。这种新兴的演唱风格是声乐艺…

【图解HTTP】Web服务器与HTTP的协作

顺心的人大抵一样&#xff0c;坎坷的人各有各的坎坷。也只能坚持自我修行&#xff0c;等待自己的机遇。 文章目录1. Web服务器与HTTP的协作1.1 单台虚拟主机实现多域名1.2 通信数据转发程序&#xff1a;代理、网关、隧道1.2.1 代理1.2.2 网关1.2.3 隧道1.3 缓存1.4 扩展&#x…

【程序语言】-- 编程语言分类和应用

系列文章目录 文章目录系列文章目录前言一、编程语言有哪些二、应用概况1.Python2.Java3.C/C4.JavaScript5.Golang6.R7.Swift8.PHP9.C#9.MATLAB总结前言 一、编程语言有哪些 JavaScriptHTML/CSSPythonSQLJavaNode.jsTypeScriptC#Bash/ShellCPHPCPowerShellGoKotlinRustRubyPe…

Linux:进程

0.前言&#xff1a;冯诺依曼体系结构 冯诺依曼体系结构 电脑中涉及两种类型信号&#xff1a;控制信号、数据信号 计算机硬件构成&#xff1a; 输入设备&#xff1a;显卡、 输出设备&#xff1a;显示器、 存储器&#xff08;内存)&#xff1a;磁盘不算&#xff0c;磁盘算外部设…

LLC谐振电路增益公式推导

LLC谐振电路增益公式推导 图 由图可知 GVoutVinsLm//Rac1sCrsLrsLm//RacG\frac{V_{out}}{V_{in}}\frac{sLm//Rac}{\frac{1}{sCr}sLrsLm//Rac} GVin​Vout​​sCr1​sLrsLm//RacsLm//Rac​ 其中 sLm//RacsLm∗RacsLmRacsLm//Rac\frac{sLm*Rac}{sLmRac} sLm//RacsLmRacsLm∗Rac​…

Java 多线程编程(入门)

目录 一、简单介绍 Thread类 【1】Thread类中一些常用的方法 【2】编写一个简单多线程程序&#xff08;入门&#xff09; 二、Java中创建多线程的方法&#xff08;重点面试题&#xff09; 1.继承 Thread 类 2.实现 Runnable 接口&#xff0c;重写 run 3.使用匿名内部类&…

(决策树中的)信息熵和样本分类的信息熵计算源代码

目录 一、信息熵 ① 基本概念 ② 计算公式 二、决策树中的信息熵 三、计算数据集样本分类的香农熵的源代码 说明&#xff1a;由于对这部分的知识有所遗忘&#xff0c;因此翻阅资料进行温习&#xff0c;写下本文。 需要注意的是&#xff0c;在本文中&#xff0c;所有中括号…

WPF 控件专题 ContentControl 控件详解

1、ContentControl 介绍 ContentControl 表示包含一段任意类型内容的控件&#xff1b;也叫作内容控件。只包含一个子元素。 ************************************************************************************************************** 2、常用属性介绍 FontFamily&a…

《代码随想录》一刷记录之回溯算法

文章目录前言第9章&#xff1a;回溯法回溯算法理论基础什么是回溯算法回溯法的性能回溯法可以解决的问题理解回溯法回溯法模板组合问题回溯算法剪枝优化组合总和(一)回溯算法剪枝优化电话号码的字母组合回溯算法组合总和&#xff08;二&#xff09;回溯算法剪枝优化组合总和&am…

flask数字图像处理系统开发全流程记录(基于OpenCV)

目录一、环境安装1.1 安装虚拟环境1.2 安装Flask二、搭建flask项目框架2.1 创建一个简单项目2.2 渲染html页面2.3 使用Bootstrap美化页面2.4 前后端逻辑交互2.4.1 前端实现2.4.2 后端实现三、部署3.1 Waitress工业级部署3.2 项目打包一、环境安装 1.1 安装虚拟环境 虚拟环境是…

以太网交换机(计算机网络)

目录 一、以太网交换机与网桥 二、交换机与集线器 三、交换式以太网 四、以太网交换机的要点 一、以太网交换机与网桥 1、交换式集线器又称为以太网交换机(switch)或二层交换 机&#xff08;表明此交换机工作在数据链路层&#xff09;&#xff0c;或直接简称 为交换机。 2…

2022/10/4——基于stm32mp157a的A7核按键中断实验

分析电路图可知三个按键对应的管脚为&#xff1a;KEY1----->PF9 KEY2----->PF7 KEY3----->PF8 本次实验采用延时函数来解决按键按下时的电平抖动问题 功能分析如下 如上图所示 1.需要分析GPIOF章节&#xff1a;设置引脚为输入模式 2.需要分析EXTI章节&#xff1…

人工智能算法一无监督学习(Kmeas聚类)

简介 在前面介绍的线性回归还有逻辑回归它们都是知道x,y然后开始训练模型&#xff0c;这也就是有监督学习的情况&#xff0c;还有如果只是知道x不知道y的情况那么这种就是无监督学习。 描述 需求引入&#xff0c;如果有一千万用户&#xff0c;我们要对用户进行分类。这里由于…

Pytorch深度学习笔记之三(构建一个完整的神经网络)

本篇笔记是基于一个印度人写的《Pytorch深度学习》一书的第二章&#xff0c;主要用来描述一个麻雀虽小五脏俱全的完整的神经网络&#xff0c;包含了建模、训练等。原书的代码基于较老版本的Pytorch&#xff0c;有多处编译不过&#xff0c;笔者都做了调整&#xff0c;并在文末给…

几种常见的概率分布表

参考:《概率论与数理统计 第四版》

Jenkins+Maven+Gitlab+Tomcat 自动化构建打包、部署

一、环境需求 本帖针对的是Linux环境&#xff0c;Windows或其他系统也可借鉴。具体只讲述Jenkins配置以及整个流程的实现。 1.JDK&#xff08;或JRE&#xff09;及Java环境变量配置&#xff0c;我用的是JDK1.8。 2.Jenkins 持续集成和持续交付项目。 3.现有项目及gitlab&#…

Redis实战 - 03 RedisTemplate 的 hash 结构

文章目录1. put(H var1, HK var2, HV var3)2. get(H var1, Object var2)3. entries(H key)4. keys(H key)5. values(H key)6. hasKey(H key, Object var2)7. size(H key)8. putAll(H key, Map<? extends HK, ? extends HV> map)1. put(H var1, HK var2, HV var3) 新增…

机器学习之验证曲线绘制-调参可视化-sklearn

验证曲线是什么&#xff1f; 验证曲线和学习曲线的区别是&#xff0c;横轴为某个超参数的一系列值&#xff0c;由此来看不同参数设置下模型的准确率(评价标准)&#xff0c;而不是不同训练集大小下的准确率。 从验证曲线上可以看到随着超参数设置的改变&#xff0c;模型可能从…