C++灵异事件?
  • 板块学术版
  • 楼主rainygame
  • 当前回复7
  • 已保存回复7
  • 发布时间2023/4/22 20:50
  • 上次更新2023/10/23 17:45:31
查看原帖
C++灵异事件?
804607
rainygame楼主2023/4/22 20:50
#include <bits/stdc++.h>
using namespace std;
const char ch[] = {'L', 'O'};

int n;
map<string, int> vis;

int judge(string str){
	if (vis.count(str)) return vis[str];
	if (str.size() < 3){
		vis[str] = 0;
		return 0;
	}
	if (str.find("LO*") != -1 && str.find("L*L") != -1 && str.find("*OL") != -1){
		vis[str] = 1;
		return 1;
	}
	if (str.find('*') == -1 && str.find("LOL") == -1){
		vis[str] = 0;
		return 0;
	}
	
	cout << str << '\n';
	
	bool pj = false;  // 判断是否可以平局
	int tmp; 
	for (int i=0; i<str.size(); i++){
		if (str[i] == '*'){
			for (int j=0; j<2; j++){
				str[i] = ch[j];
				if (str.find("LO*") != -1 && str.find("L*L") != -1 && str.find("*OL") != -1){
					str[i] = '*';
					continue;
				}
				
				tmp = judge(str);
				str[i] = '*';
				if (tmp == -1){
					vis[str] = 1;
					return 1;
				}
				if (tmp == 1) continue;
				else if (!tmp) pj = true;
			}
		}
	}
	
	if (tmp){
		vis[str] = 0;
		return 0;
	}
	vis[str] = -1;
	return -1;
}

string str;

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	
	cin >> n;
	while (n--){
		cin >> str;
		cout << judge(str) << '\n';
	}
	
	return 0;
}

#include <bits/stdc++.h>
using namespace std;
const char ch[] = {'L', 'O'};

int n;
map<string, int> vis;

int judge(string str){
	if (vis.count(str)) return vis[str];
	if (str.size() < 3){
		vis[str] = 0;
		return 0;
	}
	if (str.find("LO*") != -1 && str.find("L*L") != -1 && str.find("*OL") != -1){
		vis[str] = 1;
		return 1;
	}
	if (str.find('*') == -1 && str.find("LOL") == -1){
		vis[str] = 0;
		return 0;
	}
	
//	cout << str << '\n';
	
	bool pj = false;  // 判断是否可以平局
	int tmp; 
	for (int i=0; i<str.size(); i++){
		if (str[i] == '*'){
			for (int j=0; j<2; j++){
				str[i] = ch[j];
				if (str.find("LO*") != -1 && str.find("L*L") != -1 && str.find("*OL") != -1){
					str[i] = '*';
					continue;
				}
				
				tmp = judge(str);
				str[i] = '*';
				if (tmp == -1){
					vis[str] = 1;
					return 1;
				}
				if (tmp == 1) continue;
				else if (!tmp) pj = true;
			}
		}
	}
	
	if (tmp){
		vis[str] = 0;
		return 0;
	}
	vis[str] = -1;
	return -1;
}

string str;

int main(){
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	
	cin >> n;
	while (n--){
		cin >> str;
		cout << judge(str) << '\n';
	}
	
	return 0;
}

下面两份代码唯一的区别就是第 2323 行是否被注释。

但是它们最后所得到的答案却完全不同(一个是 00,一个是 11)

是什么问题呢?

2023/4/22 20:50
加载中...