题解:P15959 [ICPC 2018 Jakarta R] Lie Detector
xiaozhao123456789 · · 题解
题目看似很长,其实意思是很简单的。
根据题目意思模拟即可
我们需要一个数组来存储每一个测谎仪的真假,输入时如果是真的就设为1,否则设为0。
我们还需要一个变量来存储当前的测谎仪是真是假,从最后一个开始,当前是真的就为1,否则为0。就这样一步步往后找,全部找完之后就为目击者证词的真假了——因为最终的值为第一个测谎仪的真假,如果是真的则目击者说的话就是测谎仪测出来的,否则就与测谎仪测出来的相反,这一部分大家可以思考一下,我认为可能有点绕。
代码
#include<bits/stdc++.h>
using namespace std;
const int N=100010;//数组大小
int n,a[N],num;//num:存储当前的测谎仪是真是假 a[N]:存储每一个测谎仪的真假
string s;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>s;
if(s=="TRUTH")
{
a[i]=1;
}
else
{
a[i]=0;
}
}
if(a[n]==1)//先判断最后一个
{
num=1;
}
for(int i=n-1;i>=1;i--)
{
if(a[i]==0)
{
if(num==0)
{
num=1;
}
else
{
num=0;
}
}
}
if(num==1)//真话
{
cout<<"TRUTH";
}
else//假话
{
cout<<"LIE";
}
return 0;
}