社区讨论
本地评测与在线评测结果不一致
P1039[NOIP 2003 提高组] 侦探推理参与者 2已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @m02dveup
- 此快照首次捕获于
- 2024/08/20 20:10 2 年前
- 此快照最后确认于
- 2025/11/04 22:55 4 个月前
rt
CPP#include <map>
#include <cstring>
#include <iostream>
using namespace std;
int m, n, p;
map<string, int> num;
string s[2][105], name[25];
string crime = "Impossible";
string D[10] = {
"",
"Monday.",
"Tuesday.",
"Wednesday.",
"Thursday.",
"Friday.",
"Saturday.",
"Sunday.",
};
int status[25];
int main()
{
cin >> m >> n >> p;
for (int i = 1; i <= m; i++)
{
cin >> name[i];
num.insert(make_pair(name[i], i));
}
getline(cin, s[1][0]);
for (int i = 1; i <= p; i++)
{
getline(cin, s[1][i]);
int len = s[1][i].length();
for (int j = 0; j < len; j++)
{
if (s[1][i][j] == ':')
{
s[0][i] = s[1][i].substr(0, j);
s[1][i] = s[1][i].substr(j + 2);
break;
}
}
}
for (int i = 1; i <= m; i++)
{
for (int day = 1; day < 8; day++)
{
bool flag = 1;
int T = 0, F = 0;
for (int j = 1; j <= m; j++)
status[j] = -1;
for (int j = 1; j <= p && flag; j++)
{
if (F > n || T > m - n)
{
flag = 0;
break;
}
if (s[1][j] == "I am not guilty.")
{
if (num[s[0][j]] != i)
{
if (status[num[s[0][j]]] == 0)
flag = 0;
else if (status[num[s[0][j]]] == -1)
{
T++;
status[num[s[0][j]]] = 1;
}
}
else
{
if (status[num[s[0][j]]] == 1)
flag = 0;
else if (status[num[s[0][j]]] == -1)
{
F++;
status[num[s[0][j]]] = 0;
}
}
}
else if (s[1][j] == "I am guilty.")
{
if (num[s[0][j]] == i)
{
if (status[num[s[0][j]]] == 0)
flag = 0;
else if (status[num[s[0][j]]] == -1)
{
T++;
status[num[s[0][j]]] = 1;
}
}
else
{
if (status[num[s[0][j]]] == 1)
flag = 0;
else if (status[num[s[0][j]]] == -1)
{
F++;
status[num[s[0][j]]] = 0;
}
}
}
else
{
int f[3] = {int(s[1][j].find("Today is ")), int(s[1][j].find("is guilty.")), int(s[1][j].find("is not guilty."))};
if (f[0] == 0)
{
int find_day = 0;
for (int k = 1; k <= 7; k++)
{
if (s[1][j].find(D[k]) == 9)
{
find_day = k;
break;
}
}
if (find_day == day)
{
if (status[num[s[0][j]]] == 0)
flag = 0;
else if (status[num[s[0][j]]] == -1)
{
T++;
status[num[s[0][j]]] = 1;
}
}
else if (find_day)
{
if (status[num[s[0][j]]] == 1)
flag = 0;
else if (status[num[s[0][j]]] == -1)
{
F++;
status[num[s[0][j]]] = 0;
}
}
}
else if (f[1] != string::npos)
{
auto iter = num.find(s[1][j].substr(0, f[1] - 1));
if (iter != num.end())
{
if (iter->second == i)
{
if (status[num[s[0][j]]] == 0)
flag = 0;
else if (status[num[s[0][j]]] == -1)
{
T++;
status[num[s[0][j]]] = 1;
}
}
else
{
if (status[num[s[0][j]]] == 1)
flag = 0;
else if (status[num[s[0][j]]] == -1)
{
F++;
status[num[s[0][j]]] = 0;
}
}
}
}
else if (f[2] != string::npos)
{
auto iter = num.find(s[1][j].substr(0, f[2] - 1));
if (iter != num.end())
{
if (iter->second != i)
{
if (status[num[s[0][j]]] == 0)
flag = 0;
else if (status[num[s[0][j]]] == -1)
{
T++;
status[num[s[0][j]]] = 1;
}
}
else
{
if (status[num[s[0][j]]] == 1)
flag = 0;
else if (status[num[s[0][j]]] == -1)
{
F++;
status[num[s[0][j]]] = 0;
}
}
}
}
}
}
if (F > n || T > m - n)
flag = 0;
if (flag)
{
if (crime != "Impossible" && crime != name[i])
{
cout << "Cannot Determine" << endl;
return 0;
}
else
crime = name[i];
}
}
}
cout << crime << endl;
return 0;
}
回复
共 5 条回复,欢迎继续交流。
正在加载回复...