#include<bits/stdc++.h>
using namespace std;
const int MAXN = 1e3 + 1;
int six_id;
int feel_six_pig[MAXN]; //feel_six_pig表示主猪堆第i个人的印象
int ide[MAXN]; //ide表示这个人是跳忠还是跳反
int n, m;
vector<char> cards; //抽牌堆
set<pair<int, char>> st[MAXN]; //每个人手牌具体位置
bool weapon[MAXN];
map<char, int> pigs_card[MAXN]; //每个人的手牌
int pigs_hp[MAXN]; //血量
int pigs_type[MAXN]; //种类,记录当前猪是忠猪,主猪还是反猪
void print();
bool offset(int x, bool help);
void check_demage(int x, int y) { //判断是否死亡,如果死亡,判断是谁杀死的
if(pigs_hp[x] == 0) {
if(pigs_type[x] == 1) {
print();
}
int bad = 0;
for(int i = 1; i <= n; i++) {
bad += (pigs_type[i] == 3 && pigs_hp[i] > 0);
}
if(bad == 0) {
print();
}
if(pigs_type[y] == 1 && pigs_type[x] == 2) { //大逆不道的主猪杀死了忠猪
pigs_card[y].clear(); //小小的惩罚
}
if(pigs_type[x] == 3) { //小小的奖励
for(int i = 1; i <= 3; i++) {
pigs_card[x][cards[cards.size() - 1]]++;
cards.pop_back();
}
}
}
else { //改变伤害来源对全体猪的印象
if(pigs_type[x] == 1) {
ide[y] = 3;
feel_six_pig[y] = 1;
}
if(pigs_type[x] == 2) {
ide[y] = 3;
}
if(pigs_type[x] == 3) {
ide[y] = (y == six_id ? 1 : 2);
}
}
return;
}
void Fight(int x, int y) { //决斗
if(offset(y, true)) {
return;
}
bool turn = true;
if(pigs_type[y] == 2 && pigs_type[x] == 1) { //忠猪不打主猪
pigs_hp[y]--;
check_demage(y, x);
}
while(1) {
if(turn == true) {
if(pigs_card[y]['K'] == 0) {
break;
}
else {
pigs_card[y]['K']--;
}
}
else {
if(pigs_card[x]['K'] == 0) {
break;
}
else {
pigs_card[x]['K']--;
}
}
turn = !turn;
}
if(turn) {
pigs_hp[y]--;
check_demage(y, x);
}
else {
pigs_hp[x]--;
check_demage(x, y);
}
return;
}
bool offset(int x, bool help) { //无懈可击抵消的阶段, help表示此轮如果使用无懈可击是表敌意还是献殷勤
int type_now = ide[x];
int now = x % n + 1;
if(type_now == 0) {
return false;
}
if(ide[x] && pigs_card[x]['J'] && help) { //自己手上有无懈可击并且表明身份,对自己有用则直接使用
pigs_card[x]['J']--;
return offset(x, !help);
}
while(now != x) {
if(pigs_card[now]['J'] && ide[now]) {
if((type_now == 1 || type_now == 2) && help && (pigs_type[x] == 1 || pigs_type[x] == 2)) { //都是主猪忠猪,互相帮助
ide[now] = (now == six_id ? 1 : 2);
pigs_card[now]['J']--;
return offset(now, !help);
}
if((type_now == 1 || type_now == 2) && !help && pigs_type[x] == 3) { //反猪对忠猪主猪表敌意
ide[now] = 3;
pigs_card[now]['J']--;
return offset(now, !help);
}
if(type_now == 3 && !help && (pigs_type[x] == 1 || pigs_type[x] == 2)) { //忠猪主猪对反猪表敌意
ide[now] = (now == six_id ? 1 : 2);
pigs_card[now]['J']--;
return offset(now, !help);
}
if(type_now == 3 && help && pigs_type[x] == 3) { //反猪对反猪献殷勤
ide[now] = -1;
pigs_card[now]['J']--;
return offset(now, !help);
}
}
now = now % n + 1;
}
return false;
}
void Shoot(int x) { //万箭齐发
for(int i = x + 1; i <= n; i++) {
if(offset(i, true)) {
continue;
}
if(!pigs_card[i]['D']) {
pigs_hp[i]--;
check_demage(i, x);
}
else {
pigs_card[i]['D']--;
}
}
for(int i = 1; i < x; i++) {
if(offset(i, true)) {
continue;
}
if(!pigs_card[i]['D']) {
pigs_hp[i]--;
check_demage(i, x);
}
else {
pigs_card[i]['D']--;
}
}
return;
}
void male_pig(int x) { //男猪入侵
for(int i = x + 1; i <= n; i++) {
if(offset(i, true)) {
continue;
}
if(!pigs_card[i]['K']) {
pigs_hp[i]--;
check_demage(i, x);
}
else {
pigs_card[i]['K']--;
}
}
for(int i = 1; i < x; i++) {
if(offset(i, true)) {
continue;
}
if(!pigs_card[i]['K']) {
pigs_hp[i]--;
check_demage(i, x);
}
else {
pigs_card[i]['K']--;
}
}
return;
}
void Kill(int x, int y) {
if(pigs_card[y]['D']) {
pigs_card[y]['D']--;
return;
}
else {
pigs_hp[y]--;
check_demage(y, x);
}
}
int Find(int x) { //找冤大头表敌意
int now = x % n + 1;
while(now != x) {
if(!pigs_hp[now]) {
now = x % n + 1;
continue;
}
if((pigs_type[x] == 1 || pigs_type[x] == 2) && ide[now] == 3 || pigs_type[x] == 3 && (ide[now] == 1 || ide[now] == 2) || pigs_type[x] == 1 && feel_six_pig[now] == 1) {
return now;
}
else {
break;
}
}
now = (x - 1 == 0 ? n : x - 1);
while(now != x) {
if(!pigs_hp[now]) {
now = (x - 1 == 0 ? n : x - 1);
continue;
}
if((pigs_type[x] == 1 || pigs_type[x] == 2) && ide[now] == 3 || pigs_type[x] == 3 && (ide[now] == 1 || ide[now] == 2) || pigs_type[x] == 1 && feel_six_pig[now] == 1) {
return now;
}
else {
break;
}
}
return -1;
}
bool check(int x, char c) {
if(c == 'K' || c == 'F') {
int now = Find(x);
if(now == -1) {
return false;
}
else {
if(c == 'K') {
Kill(x, now);
}
else {
Fight(x, now);
}
}
}
else if(c == 'D' || c == 'J') {
return false;
}
else if(c == 'Z') {
weapon[x] = true;
return true;
}
else if(c == 'P') {
pigs_hp[x]++;
return true;
}
else if(c == 'N') {
male_pig(x);
return true;
}
else {
Shoot(x);
return true;
}
}
void pigs_round(int x) {
bool Kill_used = false;
for(auto i : st) {
if(Kill_used && i.second == 'K') {
continue;
}
if(check(x, i.second)) {
mp[x][i.second]--;
st.erase(i);
Kill_used |= (i.second == 'K');
break;
}
}
return;
}
void read() { //输入
}
void init() { //初始化
}
void start() { //回合开始
}
void print() { //输出
}
int main() {
read();
init();
start();
print();
return 0;
}
具体报错的位置是代码的第262行if(Kill_used && i.second == 'K') {
,但是不知道报错信息的意思以及修改方法